Я пытаюсь добавить оценку пользователю и работаю с ошибкой. Вызов функции-члена Review () в null. в laravel 5,8 - PullRequest
1 голос
/ 22 апреля 2020

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

public function store(Request $request,User $user)
   {
       //
       $up=User::find($user->id);
       if($request->review)
       {
           $up->Review()->attach($request->review);
       }
     if($request->rating)
     {
         $up->Review()->attach($request->rating);
     }
       return redirect()->back();

   }

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

class Review extends Model
{
    //
    protected $fillable=['rating','review'];
    Public function User()
    {

        return $this->belongsToMany(User::class);
    }
}

, где в моей пользовательской модели я сделал это

  Public function Review()
      {

          return $this->belongsToMany(Review::class);
      }

, где как мои миграции выглядят так

 public function up()
    {
        Schema::create('review_user', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('user_id');
            $table->string('rating');
            $table->string('review');
            $table->timestamps();
        });
    }

мои формы выглядят следующим образом

<form action="{{route('ReviewsUser',$user->id)}}" method="POST">
                    @csrf
                    @method('PUT')




                            <div class="feedback-yes-no">
                                <strong>Your Rating</strong>
                                <div class="leave-rating">
                                    <input type="radio" name="rating" id="rating-1" value="1" checked/>
                                    <label for="rating-1" class="icon-material-outline-star"></label>
                                    <input type="radio" name="rating" id="rating-2" value="2"/>
                                    <label for="rating-2" class="icon-material-outline-star"></label>
                                    <input type="radio" name="rating" id="rating-3" value="3"/>
                                    <label for="rating-3" class="icon-material-outline-star"></label>
                                    <input type="radio" name="rating" id="rating-4" value="4"/>
                                    <label for="rating-4" class="icon-material-outline-star"></label>
                                    <input type="radio" name="rating" id="rating-5" value="5"/>
                                    <label for="rating-5" class="icon-material-outline-star"></label>
                                </div><div class="clearfix"></div>
                            </div>

                            <textarea class="with-border" placeholder="Enter Your Comments" name="review" id="review" cols="7" required></textarea>



                        <!-- Button -->
                        <button class="button full-width button-sliding-icon ripple-effect" type="submit" >Your Review's <i class="icon-material-outline-arrow-right-alt"></i></button>
                    </form>

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

1 Ответ

0 голосов
/ 22 апреля 2020
Call to a member function Review() on null 

Эта ошибка означает, что ваша переменная $up, вызывающая функцию-член Review(), имеет нулевое значение. Это означает, что он не находит вашего пользователя в

$up = User::find($user->id);

В вашем почтовом маршруте нет параметра маршрута для передачи идентификатора пользователя для поиска пользователя.

Следовательно, изменение этого

Route::post('Reviews','ReviewsController@store')->name('ReviewsUser');

на это

Route::post('Reviews/{user}','ReviewsController@store')->name('ReviewsUser');

теперь будет захватывать идентификатор пользователя в вашем контроллере через User $user

...