Le modèle Comment je l'obtiens dans le contrôleur: p> Comment puis-je le rendre dans la vue: p> semble avoir un problème lorsque la relation est à l'intérieur d'une table, je reçois une erreur p> existe une solution Pour cela? P> P>
4 Réponses :
Cela peut être d'une aide. Heres Comment je l'ai fait avec Catégories de produits / Sous-catégories
Modèle: P>
$categories = Category::with(['subcat' => function($query){ $query->with(['subcat' => function($query){ $query->orderBy('name'); }]) }])->where('node_id', 0)->orderBy('position')->get(['id', 'name']); foreach ($categories as $level1) { echo $level1->name; foreach ($level1->subcat as $level2) { echo $level2->name; foreach ($level2->subcat as $level3) { echo $level3->name; } } }
mais cela est limité pour les niveaux, je veux le rendre illimité en profondeur
J'ai mis en place un moyen d'obtenir une profondeur sans fin dans les menus de Laravel 4. Ce n'est pas exactement ce que vous demandez, mais la technique doit être facilement adaptable.
Pour commencer mon menu n'est qu'un tableau (pour l'instant) Se doit assigné à la vue principale et qui ressemble à quelque chose comme ça. p> Vous pouvez facilement réaliser cette structure en utilisant également un modèle. Vous aurez besoin de la fonction maintenant dans mon modèle de lame maître Je fais ceci: < / p> puis dans le modèle de layouge._menuitem code> Je fais ceci: p> comme vous Peut voir ce modèle s'appelle de manière récursive, mais avec une variable code> $ $ code>. Cela signifie que vous pouvez aller aussi profondément que vous le souhaitez dans votre structure de menu. (Le bloc PHP est juste là pour préparer certaines variables afin que je puisse conserver le code de modèle réel propre et lisible, techniquement, il n'est pas nécessaire). P> J'ai dépouillé le code Bootstrap Twitter dans les extraits ci-dessus pour garder les choses Simple (j'ai réellement des titres, des badges déroulants, des icônes, des diviseurs, ... dans mon modèle / matrice), le code n'est donc pas testé. La version complète fonctionne bien pour moi, alors faites-moi savoir si j'ai commis une erreur quelque part. P> J'espère que cela vous aide (ou quelqu'un d'autre, car c'est une question plutôt ancienne) sur le chemin. Faites-moi savoir si vous avez besoin de plus de pointeurs / d'aide, ou si vous voulez mon code complet. P> codage heureux! P> P> enfant_items code> ou quelque chose, car nous allons rendre le menu de haut en bas, et non à partir du bas vers le haut. P>
Je crois que ce qui suit est la bonne façon de faire de la récursion dans Laravel.
supposant que nous avons une relation d'enfants, vous pouvez ajouter ceci à votre classe de modèle: p> Ce qui précède obtiendra tous les enregistrements enfants récursivement, et vous pouvez y accéder comme ceci: P> // This will get the descenands and flatten them recursively
$d = Category::find(1)->getDescendants()->flattenRelation( 'children' );
// This will give you a flat collection of all the descendants
foreach ( $d as $model ) {
}
Mon menu Laravel avec sous-menu illimité (éléments de menu de la base de données) dans le basocontroller ou où vous voulez, mettre p> Après cela, je mets le menu HTML sur le macro.php p> et dans la vue (templissage de lame) appeler simplement le p>
On dirait que je dois utiliser une table pivot pour ce cas
Êtes-vous certain que l'élément de menu que vous essayez d'obtenir a un parent? "Essayer d'obtenir la propriété de non-objet" suggère qu'il n'y a pas de
parent_menu code> disponible.
Poster ceci ici pour les personnes qui viennent de la recherche hea.it/laravel-model-relationwhip