7
votes

Menu Laravel Récursion automatique

Le modèle xxx

Comment je l'obtiens dans le contrôleur: xxx

Comment puis-je le rendre dans la vue: xxx

semble avoir un problème lorsque la relation est à l'intérieur d'une table, je reçois une erreur xxx

existe une solution Pour cela?


3 commentaires

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 disponible.


Poster ceci ici pour les personnes qui viennent de la recherche hea.it/laravel-model-relationwhip


4 Réponses :


0
votes

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;
        }
    }
}


1 commentaires

mais cela est limité pour les niveaux, je veux le rendre illimité en profondeur



4
votes

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. xxx

Vous pouvez facilement réaliser cette structure en utilisant également un modèle. Vous aurez besoin de la fonction enfant_items ou quelque chose, car nous allons rendre le menu de haut en bas, et non à partir du bas vers le haut.

maintenant dans mon modèle de lame maître Je fais ceci: < / p> xxx

puis dans le modèle de layouge._menuitem Je fais ceci: xxx

comme vous Peut voir ce modèle s'appelle de manière récursive, mais avec une variable $ $ . 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).

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.

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.

codage heureux!


0 commentaires

2
votes

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> xxx pré>

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 ) {

}


0 commentaires

1
votes

Mon menu Laravel avec sous-menu illimité (éléments de menu de la base de données) xxx

dans le basocontroller ou où vous voulez, mettre xxx

Après cela, je mets le menu HTML sur le macro.php xxx

et dans la vue (templissage de lame) appeler simplement le xxx


0 commentaires