У меня есть модель MenuItem
, которая использует таблицу menu_items
со следующими полями:
$table->bigIncrements('id');
$table->string('name')->nullable(false);
$table->unsignedBigInteger( 'category_id')->nullable(false);
$table->text('description')->nullable();
$table->string('image')->nullable();
$table->decimal('price')->nullable(false);
$table->boolean('available')->default(true);
$table->boolean('active')->default(true);
$table->timestamps();
$table->foreign('category_id')
->references('id')
->on('categories');
Теперь есть определенные пункты меню, которые могут иметь стороны. Эти стороны также являются пунктами меню и определяются их категорией (side
категория).
Например: я хочу иметь MenuItem
, который относится к категории MainDish
. Для этой специальной категории у пункта меню могут быть стороны. Эти стороны также MenuItem
. Поэтому я хочу сохранить стороны, связанные с MainDish
.
. Для этого я создал миграцию menu_item_sides
:
Schema::create('menu_item_sides', function (Blueprint $table) {
$table->primary(['main_item_id', 'side_item_id']);
$table->unsignedBigInteger('main_item_id');
$table->unsignedBigInteger('side_item_id');
$table->timestamps();
$table->foreign('main_item_id')
->references('id')
->on('menu_items')
->onDelete('cascade');
$table->foreign('side_item_id')
->references('id')
->on('menu_items')
->onDelete('cascade');
});
и соответствующую ей модель MenuItemSide
, Как видите, menu_item_sides
имеет составной ключ с main_item_id', 'side_item_id'
, и оба ключа указывают на один и тот же PK в menu_items
.
В этом конкретном c случае, как мне объявить отношения между модели MenuItem
и MenuItemSide
?