2017-10-17 5 views
0

J'ai le tableau ci-dessous:Foreach ul li comme condition de l'infini

public function up() 
{ 
    Schema::create('locations', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('location_name',50); 
     $table->integer('location_id')->unsigned(); 
     $table->foreign('location_id')->references('id')->on('locations');   
     $table->softDeletes(); 
     $table->timestamps(); 
    }); 
} 

Là où je veux ressembler à un arbre, mais toujours en mesure de l'utiliser dans la liste déroulante ma ul li. l'intérieur de ma lame, je l'ai fait:

    <ol> 
         @foreach($locations->where('location_id','=',null) as $location) 
          <li draggable='true'> 
           {{$location->location_name}} 
           <ol> 
           @foreach($location->get_sub as $location_sub) 
            <li draggable='true'>{{$location_sub->location_name}}</li> 
           @endforeach 
           </ol> 
          </li> 
         @endforeach 
        </ol> 

$ emplacement-> get_sub est fonction à l'intérieur du modèle Relation

public function get_sub() 
{ 
    return $this->hasMany('App\Location','location_id','id'); 
} 

En ce faisant, je peux atteindre l'emplacement parent/enfant; cependant, j'ai parfois besoin d'un arrière-petit-petit-enfant, etc. Mon idée de faire ceci est de faire une boucle while pour rechercher chaque emplacement enfant et et de les mettre dans la liste ul li et chaque get_sub pour le montrer sous avec ul li à l'intérieur du ul parent li ressemble à ceci:

enter image description here

Parfois, si l'emplacement obtient 7 pères et si je connais le nombre de pères, je peux faire en boucle pour autant que le nombre de pères, mais Je ne connais pas le nombre à la compilation.

Répondre

2

Comment s'appelle votre modèle? Supposons que cela s'appelle Emplacement. Ajoutez votre nom de relation avec le $ à la propriété dans votre modèle Localisation:

protected $with = ['get_sub']; 

Dans votre contrôleur (ou chaque fois que vous faites) vous pouvez appeler:

$locations = Location::get(); 

Vous obtiendrez cette liste imbriquée . Mais faites attention si votre liste augmente trop. Chaque fois que vous récupérez un emplacement à partir de DB, il viendra avec tous ses enfants. Donc, vérifiez si vous pouvez dynamiquement ajouter ou supprimer cet élément 'get_sub' de votre $ avec le tableau. Pour commencer à partir de l'enfant, vous devez définir une méthode parent() dans votre modèle Location et l'ajouter au $ avec le tableau.

protected $with = ['parent']; 

public function parent() 
{ 
    return $this->belongsTo('App\Location', 'location_id', 'id'); 
} 
+0

$ emplacements = Emplacement :: withTrashed() -> get(); \t \t vue de retour ('locations.create', compact ('locations')); ceci est mon code de contrôleur que j'ai déjà fait ce que vous avez dit –

+0

mon problème c'est que je veux que cela commence par le dernier enfant pas du parent –