7
votes

Génération de liste d'archives pour un blog à Laravel

J'essaie de générer une liste d'archives pour les articles de blog. La liste d'archives doit afficher une année et une date dans l'ordre chronologique inverse comme suit:

$posts = Post::all();
$archive = array();
foreach ($posts as $post) {
    $year = date('Y', strtotime($post->created_at));
    $month = date('m', strtotime($post->created_at));
}


0 commentaires

4 Réponses :


0
votes

Je pense que vous êtes proche, mais vous devez tester les données, c'est ce que vous demandez?

Vous pouvez également interroger pour les données.

Je ne dis pas que est le seul moyen de résoudre le problème, mais comment cela fonctionnerait-il? Le pour chaque instruction pourrait stocker les données dans un tableau, quelque chose comme ceci: xxx

qui ferait le tour, mais ... Et si nous avions des données filtrées dans le première place. Je parie que Laravel a un meilleur moyen de le gérer.

Yep! http://four.laravel.com/docs/eloquent#query-Scopes

Conservez la lecture sur le polymorphisme et la requête des relations, des propriétés dynamiques ...


0 commentaires

17
votes

Pour générer un panneau de navigation dans une sorte de panneau de navigation, vous pouvez faire la majeure partie du traitement sur le côté dB et ne pas récupérer tous les enregistrements de publications de blog avec une requête comme celle-ci xxx

sortie: < / p> xxx

Je ne suis pas un expert en laravel, mais il faut atteindre quelque chose de similaire à ce xxx

si vous Voulez que vous puissiez ajouter des sous-totaux à la première année comme ceci xxx

sortie: xxx

sqlfiddle


1 commentaires

Merci. La requête SQL a travaillé, mais je ne pense pas que ce soit la voie des requêtes brutes à Laravel, de sorte que cela n'a pas fonctionné.



16
votes

C'est le moyen le plus élégant de faire cela serait de passer une fermeture dans la méthode de la collection Groupby ().

@foreach ($posts_by_date as $date => $posts)
    <h2>{{ $date }}</h2>
    @foreach ($posts as $post)
        <h3>{{ $post->title }}</h3>
        {{ $post->content }}
    @endforeach
@endforeach


3 commentaires

Très élégant ! Un problème par défaut, le tri est ASC! Début 2013, 2014, etc ... comment trier en descendant?


Je trouve la solution: Actualités :: Orderby ('Created_at', 'Desc') -> Obtenez () -> Groupby (Fonction (Date de $)


Cela ne renvoie pas exactement ce que l'OP a demandé, il souhaitait une liste de mois avec nombre de messages dans chacun, tandis que cela retourne les poteaux eux-mêmes, organisés en mois. C'est vrai que vous pouvez utiliser compter () pour résoudre ceci ici, mais cela renvoie toujours beaucoup d'informations inutiles ... mais peut-être que c'est encore plus rapide qu'une requête SQL personnalisée? Je ne sais pas ...



2
votes

J'étais coincé cela depuis un moment aussi. En utilisant une autre fonctionnalité de larançonnage, je suis arrivé à la solution suivante:

Pour créer l'archive: xxx

puis pour afficher (y compris bootstrap 4 classes): xxx


0 commentaires