sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar en databasdriven navigeringsmeny på flera nivåer med Laravel

Så efter att ha letat mycket mer och läst från olika källor är det här vad jag kom fram till och det fungerar bra:

/app/models/Navigation.php

<?php

class Navigation extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'navigation';

    public function parent() {

        return $this->hasOne('navigation', 'id', 'parent_id');

    }

    public function children() {

        return $this->hasMany('navigation', 'parent_id', 'id');

    }  

    public static function tree() {

        return static::with(implode('.', array_fill(0, 4, 'children')))->where('parent_id', '=', NULL)->get();

    }

}

/app/controllers/HomeController.php

<?php

class HomeController extends BaseController {

    protected $layout = "layouts.main";

    public function showWelcome()
    {

        $items = Navigation::tree();

        $this->layout->content = View::make('layouts.home.index')->withItems($items);

    }

}

/app/views/layouts/home/index.blade.php

<ul>
    @foreach($items as $item)
        <li>{{ $item->title }}
            @foreach($item['children'] as $child)
            <li>{{ $child->title }}</li>
            @endforeach
        </li>
    @endforeach
</ul>


  1. Hur man sammanfogar strängar i SQL Server med CONCAT()

  2. Skapa en anpassad SQL Server Docker-bild ovanpå den officiella bilden

  3. Mysql select med villkorlig logik

  4. Nya Microsoft Access-funktioner på väg!