Laravel, хранящий отношения «многие ко многим» через eloquent

#php #laravel #eloquent

#php #laravel #eloquent

Вопрос:

Я понимаю, что у многих людей, вероятно, была примерно такая же проблема, но я просто хочу прояснить некоторые вещи для себя и, надеюсь, других.

У меня есть 3 таблицы: categories , subcategories и category_subcategory . В моделях я определяю отношения следующим образом:

 // Category class

public function subcategories()
{
    return $this->belongsToMany(Subcategory::class);
}
  

 // Subcategory class

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

Теперь при вставке данных в таблицу ссылок я использую это:

 $category = new Category();
$category->name = $categoryData['name'];
$category->subcategories()->sync($categoryData['subcategoryIds']);
$category->save();
  

Я возвращаю эту ошибку:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'category_id' cannot be null (SQL: insert into `category_subcategory` (`category_id`, `subcategory_id`) values (?, 3,5))

Итак, вопрос в том, если я больше ничего не делаю неправильно, как мне вставить category_id текущую запись, которую я создаю?

Комментарии:

1. Переместите $category->subcategories()->sync($categoryData['subcategoryIds']); после $category->save(); . Вы пытаетесь sync() для категории, которая еще не существует.

2. поскольку Category созданный вами экземпляр не существует (это новый экземпляр, он не представляет запись в базе данных atm), поэтому у него нет идентификатора, поскольку он еще не был сохранен