Ответы пользователя по тегу MySQL
  • Как правильно выводить многоуровневое меню?

    @1ax3l
    Web Developer
    Если у вас меню и подменю храняться в одной таблице то реализовать то что вы хотите довольно легко.
    Создаем модель Menu.php
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Menu extends Model
    {
    	public $timestamps = false;
    	protected $fillable = ['name', 'value', 'menu_id'];
    
    	public function subMenu()
    	{
    		return $this->hasMany('App\Menu');//Чтобы вывести подменю
    	}
    }


    Создаем таблицу
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateMenusTable extends Migration
    {
        public function up()
        {
            Schema::create('menus', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name')->unique();
                $table->string('value')->index();
                $table->integer('menu_id')->index()->nullable();
            });
        }
    
        public function down()
        {
            Schema::dropIfExists('menus');
        }
    }


    Потом в вашем контроллере выводим только ОСНОВНЫЕ меню у которых menu_id поле null
    # .. Ваш контроллер
    use App\Menu;//подключаем модуль
    	public function index()
    	{
    		$menus = Menu::whereNull('menu_id')->get();//выводим основные меню
    		return view('menus'. compact('menus'));
    	}


    Теперь в menus.blade.php выводим меню и подменю
    @foreach ($menus as $menu)
        {{ $menu->name }} ({{ $menu->value }})//выводим основное меню
        @foreach ($menu->subMenu as $sub)
            --{{ $sub->name }} ({{ $sub->value }})//выводим подменю
        @endforeach
    @endforeach

    Получаем
    Меню1 - значение
    --Подменю1 - значение
    и т.д


    Как то так...
    Ответ написан
    Комментировать