public function up()
{
Schema::create('brands', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description');
$table->timestamps();
});
}
create-products-table
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('brand_id');
$table->foreign('brand_id')
->references('id')->on('brands')
->onDelete('cascade');
$table->string('name');
$table->string('slug');
$table->double('price');
$table->integer('qty');
$table->text('description');
$table->timestamps();
});
}
Пример отношенияОдин-ко-Многим Brand и Product
Product может принадлежать только одному Brand
Brand может иметь много Product
app/Models/Product.php
class Product extends Model
{
public function brand()
{
return $this->belongsTo(Brand::class);
}
}
app/Models/Brand.php
class Brand extends Model
{
public function products()
{
return $this->hasMany(Product::class);
}
}
Получение данных «Один-ко-Многим»
// получаем все продукты которые связаны с нашим брендом
$brand = Brand::find(1);
$products = $brand->products;
// получаем бренд который связан с этим продуктом
$product = Product::find(1);
$brand = $product->brand;
Создание отношения «Один-ко-Многим»
// создаём продукт
$product = new Product();
$product->name = 'iPhone X';
$product->slug = 'iphone-x';
$product->price = '899.99';
$product->qty = 10;
$product->description = 'Some description';
// Выбираем бренд с айди 1
$brand = Brand::find(1);
// связываем этот продукт с брендом и сохраняем его
$product->brand()->associate($brand);
$product->save();
// как альтернативный вариант сохранения продукта связанного с брендом
$brand->products()->save($product);
// Вы также можете использовать метод saveMany() вместо save() для сохранения нескольких связанных моделей.
Удаление отношения «Один-ко-Многим»
// берём родительский обьект $brand
$brand = Brand::find(1);
// и удаляем продукт связанный с этим брендом
$brand->products()->delete();