درود بر مهندسین عزیز بنده در بخش پیاده سازی کامنت به این ارور بر خوردم که دقیق نمی دونم چی میگه ولی فکر می کنم مربوط به رلیشن شیپ باشه.
Call to a member function comments() on null
```مشکل ارور
public function comment(Request $request){
$data=$request->validate([
'commentable_id'=>'required',
'commentable_type'=>'required',
'description'=>'required',
'parent_id'=>'required',
'email'=>['required','email']
]);
auth()->user()->comments()->create($data);
return back();
مشکل ارور خط 9 یعنی comments هست
اینم به ترتیپ مدل User و Comment (و اینم بگم که از روابط پالی مرفیک استفاده می کنم برای کامنت در بخش محصولات)
public function comments(){
return $this->hasMany(Comment::class);
}
public function users(){
return $this->belongsTo(User::class);
}
public function commentable(){
return $this->morphTo();
}
و اینم مایگریشن کامنت
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->text('description');
$table->unsignedBigInteger('parent_id')->default(0);
$table->unsignedBigInteger('commentable_id');
$table->string('commentable_type');
$table->string('email');
$table->timestamps();
});
}
اینم بخش مربوط به فرانت
<form method="post" action="{{route('send.comment')}}" class="form" name="form" ng-submit="form.$valid && cmntCtrl.addComment()" novalidate>
@csrf
<input type="hidden" name="commentable_id" value="{{$product->id}}">
<input type="hidden" name="commentable_type" value="{{get_class($product)}}">
<input type="hidden" name="parent_id" value="0">
<div class="form-row">
<textarea name="description" style=""
class="input"
ng-model="cmntCtrl.comment.text"
placeholder="نوشتن نظر"
required></textarea>
</div>
<div class="form-row">
<input
name="email"
class="input"
ng-class="{ disabled: cmntCtrl.comment.anonymous }"
ng-disabled="cmntCtrl.comment.anonymous"
ng-model="cmntCtrl.comment.author"
ng-required="!cmntCtrl.comment.anonymous"
placeholder="ایمیل"
type="email">
</div>
<div class="">
<input class="btn btn-success" type="submit" value="ارسال نظر">
</div>
</form>
</div>
متن پیامتون نیاز به ویرایش داره و کدهاش بهم ریخته است. به همین خاطر خیلی سخته خوندنش...
ولی چیزی که از متن ارور میشه فهمید این هست که دارید از متد مربوط به ریلیشن comments آبجکتی استفاده میکنید که null هست.
طبق چیزی که از کدهاتون متوجه شدم یکجایی در کنترلرتون اینطور نوشتید:
auth()->user()->comments()->create($data);
حالا اگر کاربری به این متد فرستاده بشه که لاگین نکرده، پس auth()->user تون null هست و شما دارید متد comments رو روی null صدا میزنید. به همین خاطر خیلی مشخص داره ارور میده که :
Call to a member function comments() on null
راه حلش هم منطقا این هست که به یک نحوی قبلش مطمئن بشید که کاربر لاگین نکرده به این قسمت نمیرسه. مثلا قبلش با Auth::check() بررسی کنید که آیا لاگین کرده یا نه... و اگر نکرده بود به صفحه لاگین هدایتش کنید یا ...
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟