Product_id не передается в функцию - PullRequest
0 голосов
/ 19 октября 2019

У меня есть эта форма

   <form method='POST' action='/products/{{ $product->id }}/reviews'>
    {{ csrf_field() }}
         <div>
            <textarea name = 'review' placeholder ='Post a review'>{{ old('review') }}</textarea>
        </div>
        <div>
            <button type ='submit'>Save</button>
        </div>
    </form>

Затем данные передаются в эту функцию в моем контроллере

    public function store(products $product)
    {
         $product->addReview(request('review'));

         return back();
    }

Метод addReview найден в модели моих продуктов

 public function addReview($review)
    {
        return reviews::create([
            'product_id' => $this->id,
            'review' => $review
        ]);
    }

Я думаю, что проблема заключается здесь 'product_id' => $this->id, Как только я заполняю форму и отправляю, никакие данные не добавляются в поле 'product_id'. Он не включен ни в одну из почтовых данных.

1 Ответ

0 голосов
/ 19 октября 2019

В вашей модели обзора:

public function product() { 
    return $this->belongsTo(products::class); 
}

Я переименовал ее в product, потому что это один результат, а не кратный.

Тогда здесь:

public function addReview($review)
{
    return reviews::create([
        'product_id' => $review->product->id,
        'review' => $review
    ]);
}

Или даже лучше, если вы добавляете обзор, вы должны выбрать Продукт, а не обзор, так как вы добавляете обзор к продукту, поэтому метод должен быть примерно таким:

public function addReview($product)
{
    $review = request('review');

    return $product->reviews()->create([
        'review' => $review
    ]);
}

РЕДАКТИРОВАТЬ Я вижу, что у вас уже есть .. поэтому этот код должен работать. Если в таблице reviews имеется столбец product_id, связь должна быть правильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...