علیرضا
3 سال پیش توسط علیرضا مطرح شد
1 پاسخ

عدم درک باگ مربوط به بخش پیاده سازی کامنت

درود بر مهندسین عزیز بنده در بخش پیاده سازی کامنت به این ارور بر خوردم که دقیق نمی دونم چی میگه ولی فکر می کنم مربوط به رلیشن شیپ باشه.

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>

ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

متن پیامتون نیاز به ویرایش داره و کدهاش بهم ریخته است. به همین خاطر خیلی سخته خوندنش...

ولی چیزی که از متن ارور میشه فهمید این هست که دارید از متد مربوط به ریلیشن comments آبجکتی استفاده می‌کنید که null هست.
طبق چیزی که از کدهاتون متوجه شدم یکجایی در کنترلرتون اینطور نوشتید:

auth()->user()->comments()->create($data);

حالا اگر کاربری به این متد فرستاده بشه که لاگین نکرده، پس auth()->user تون null هست و شما دارید متد comments رو روی null صدا می‌زنید. به همین خاطر خیلی مشخص داره ارور میده که :
Call to a member function comments() on null

راه حلش هم منطقا این هست که به یک نحوی قبلش مطمئن بشید که کاربر لاگین نکرده به این قسمت نمیرسه. مثلا قبلش با Auth::check() بررسی کنید که آیا لاگین کرده یا نه... و اگر نکرده بود به صفحه لاگین هدایتش کنید یا ...


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام