У меня есть эти таблицы
таблица продуктов, таблица категорий и таблица category_products (которая является промежуточной таблицей между двумя предыдущими таблицами).
Теперь, согласно Laravel документ (Eloquent Relationship), он говорит "чтобы присоединить роль к пользователю, вставив запись в промежуточную таблицу, которая присоединяется к модели, используйте метод присоединения", как это
$user = App\User::find(1);
$user->roles()->attach($roleId);
в Нью-Йорке Я сделал это в
ProductsController
, чтобы получить
lastInsertId (который я не знаю, как сделать в laravel), я сделал это
$product_id = $product->save()
, а затем сделать это (чтобы вставить каждый category_id и product_id в таблицу category_products)
foreach ($this->request->category as $cat)
{
$product_id->categories()->attach($cat, ['product_id' => $product_id]);
}
тем временем, в
Модель продукта
класс, у меня есть этот метод под названием
категории
public function categories()
{
return $this->belongsToMany('Category');
}
, потому что в соответствии с laravel do c написано отношения многие ко многим определяются записью ga метод, который возвращает результат метода ownToMany. , и он дал этот пример
public function roles()
{
return $this->belongsToMany('App\Role');
}
Но, к моему удивлению, я получил эту ошибку
Вызов к категории функций-членов () в логическом
App \ Http \ Controllers \ Admin \ ProductsController :: store: 152 app / Http / Controllers / Admin / ProductsController. php: 152
Это метод
store ()
из
ProductsController
public function store()
{
$new = new Product;
$this->request->validate([
'name' => 'bail|required|unique:products|max:100',
'description' => 'required',
'price' => 'required|numeric',
'discounted_price' => 'nullable|numeric',
'display' => 'required',
'stock' => 'required|numeric'
]);
foreach ($this->request->category as $cat)
{
$this->request->validate([
$cat => 'numeric'
]);
}
$new->name = $this->request->name;
$new->description = $this->request->description;
$new->price = $this->request->price;
$new->discounted_price = $this->request->discounted_price;
$new->stock = $this->request->stock;
$new->display = $this->request->display;
$product_id = $new->save();
foreach ($this->request->category as $cat)
{
$product_id->categories()->attach($cat, ['product_id' => $product_id]);// This is the line 152
}
$success = $this->request->session()->flash('status', 'Product was successfully updated!');
return redirect('admin/products')->with($success);
}