#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), поэтому у него нет идентификатора, поскольку он еще не был сохранен