Как создать отношения между тремя таблицами в laravel? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть три таблицы:

Поставщики

id | name | type

1  | Test1 | Seller

2 | Test2 | Manufacturer

Продукты

id | name

1 | product1

2 | product2

Цены

id | supplier_id | product_id | price

1 | 1 | 1 | 1000

2| 2 | 1 | 2000

каждый поставщик имеет много продуктов, и каждый продукт принадлежит многим поставщикам. Теперь у каждого поставщика может быть отдельная цена для каждого продукта.

У меня вопрос, как создать модель и таблицу для этого сценария?

1 Ответ

1 голос
/ 04 апреля 2020

У вас будет две таблицы с моделями:

Product and Supplier

Внутри / База данных / Миграции Таблица create_products:

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->timestamps();
});

Таблица create_suppliers:

Schema::create('suppliers', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('type');
    $table->timestamps();
});

Вы понадобится сводная таблица, поэтому создайте ее с помощью команды Artisan:

php artisan make:migration create_product_supplier_table

Краткое примечание: имена сводок должны быть в алфавитном порядке, чтобы соответствовать laravel соглашению имен. Сначала идет буква «P», а затем «S» (product_supplier).

таблица product_supplier:

Schema::create('product_supplier', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('product_id');
    $table->unsignedBigInteger('supplier_id');
    $table->integer('price');
    $table->timestamps();
});

Теперь вам понадобятся следующие объявления отношений в двух модели

В приложении \ Класс продукта:

protected $guarded = [];

public function suppliers()
{
    return $this->belongsToMany(Supplier::class)->withPivot('price');
}

А также в приложении \ Класс поставщика:

protected $guarded = [];

public function products()
{
    return $this->belongsToMany(Product::class)->withPivot('price');
}

Вы настроили его сейчас. Давайте попробуем:

$supplier = App\Supplier::create(['name' => 'supplier1', 'type' => 'seller']);
$product = App\Product::create(['name' => 'product1']);

$supplier->products()->attach($product, ['price' => 80]);

Перезвоните:

$supplier->products; // it will give you the products that attached to supplier.

Итак, любой поставщик может иметь любой товар с любым ценником.

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