Вставка данных с отношением один ко многим

У меня есть три таблицы: Продукция, Компания, Тип. Компания и Типы имеют отношения один-ко-многим с Продуктами. [тип модели]

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();

Вам не нужно использовать модель "Компания" и "Тип", чтобы установить связь между ними и продуктом. Вы можете просто заполнить идентификаторы.

Другие вопросы по тегам