проблема с сводной таблицей - PullRequest
0 голосов
/ 26 апреля 2020

У меня проблема с моей сводной таблицей в laravel У меня есть Product, Category таблицы с сводной таблицей category_product, определенной как

Schema::create('category_product', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('category_id')->unsigned();
        $table->integer('product_id')->unsigned();

    });

, тогда в моем классе продукта

public function categories()
{
    return $this->belongsToMany(Category::class);
}

и в классе категории

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

, когда я пытаюсь это сделать

$product->categories()->attach(Category::find([3,4]));

поведение несколько забавное, когда только одна категория присоединяется и при повторной попытке я получаю mysql ошибку

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3' for key 'PRIMARY' (SQL: insert into `category_product` (`category_id`, `id`, `product_id`) values (0, 3, 2), (1, 4, 2))

, что очень странно. затем я взглянул на базу данных и получил enter image description here

1 Ответ

0 голосов
/ 26 апреля 2020

вы можете использовать 'newPivotQuery' следующим образом:

$product->categories()->newPivotQuery()->insert([
['category_id'=>3,'product_id'=>$product->id],
['category_id'=>4,'product_id'=>$product->id]
]);

newPivotQuery () позволяет вам делать запросы непосредственно к сводной таблице

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