Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak stworzyć oparte na bazie danych wielopoziomowe menu nawigacyjne za pomocą Laravel

Więc po przeprowadzeniu znacznie większej liczby wyszukiwań i czytania z różnych źródeł, oto, co wymyśliłem i działa dobrze:

/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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wykonywać INSERT, jeśli tabela jest pusta?

  2. MySQL - Uzyskaj licznik dla każdej zduplikowanej wartości

  3. PHP - Pojedyncze cudzysłowy czy podwójne cudzysłowy wokół zapytania SQL?

  4. MySQL:Wybierz wykonanie zapytania i czas pobierania wyników wzrasta wraz z liczbą połączeń

  5. Dlaczego tworzenie klucza obcego w Laravel 5.8 kończy się niepowodzeniem?