Laravel Создать модель для сводной таблицы - PullRequest
0 голосов
/ 22 февраля 2020

У меня есть модель 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?

1 Ответ

0 голосов
/ 22 февраля 2020

Помимо настройки имени присоединяемой таблицы, вы также можете настроить имена столбцов ключей таблицы, передав дополнительные аргументы методу belongsToMany. Третий аргумент - это имя внешнего ключа модели, для которой вы определяете отношение, а четвертый аргумент - это имя внешнего ключа модели, к которой вы присоединяетесь:

  #Example for MenuItem model
public function menuItemSides()
{
    return $this->belongsToMany('App\MenuItemSide', 'menu_item_sides', 'main_item_id', 'side_item_id');
}

#Example for MenuItemSide model
public function menuItems()
{
    return $this->belongsToMany('App\MenuItem', 'menu_item_sides', 'side_item_id', 'main_item_id');
}

Или См .: https://laravel.com/docs/6.x/eloquent-relationships#many -в-много

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...