Вставка или обновление связанных моделей в Laravel (отношения многие ко многим) - PullRequest
0 голосов
/ 27 января 2020

У меня есть эти таблицы

таблица продуктов, таблица категорий и таблица 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...