У вас будет две таблицы с моделями:
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.
Итак, любой поставщик может иметь любой товар с любым ценником.