Один-ко-Многим

Миграции для моделей
create-brands-table
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();

Last updated