Вставка данных с отношением один ко многим
У меня есть три таблицы: Продукция, Компания, Тип. Компания и Типы имеют отношения один-ко-многим с Продуктами. [тип модели]
class Type extends BaseModel {
public static $table = "type";
public static $timestamps = true;
public function products() {
return $this->has_many('Products');
}
}
[модель компании]
class Company extends BaseModel {
public static $table = "company";
public static $timestamps = true;
public function products() {
return $this->has_many('Products');
}
}
[модель продуктов]
class Products extends BaseModel {
public static $table = 'products';
public static $timestamps = true;
public function company() {
return $this->belongs_to('Company');
}
public function type() {
return $this->belongs_to('Type');
}
}
В маршруте add_product у меня есть
$product = new Products($new_product);
$company_id = $all_posts['company_id'];
$company = Company::find($company_id);
$company->products()->save($product);
$type_id = $all_posts['type'];
$type = Type::find($type_id);
$type->products()->save($product);
но когда я пытаюсь вставить данные в БД, я получаю:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '11' for key 'PRIMARY'
Как мне обновить type_id и company_id в таблице "Продукты"?
1 ответ
Решение
Если я не ошибаюсь, в вашей таблице товаров должны быть столбцы product_id и type_id? Просто укажите эти значения:
$new_product['company_id'] = $all_posts['company_id'];
$new_product['type_id'] = $all_posts['type'];
$product = new Products($new_product);
$product->save();
Вам не нужно использовать модель "Компания" и "Тип", чтобы установить связь между ними и продуктом. Вы можете просто заполнить идентификаторы.