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

باگ مربوط به نام شخص ایجاد کننده کامنت

عرض ادب بنده در بخش کامنت می خوام نام شخص ایجاد کننده کامنت برگردونم ارور زیر میاد نمی دونم مشکل چیه؟

Attempt to read property "name" on null (View: C:\Users\AsemaN\Desktop\AryaBMS\resources\views\shop\comment.blade.php)

اینم بخش کامنت

   @foreach($comment->where('parent_id',0)->get() as $com)
                    <div class="comment-box">
                        <div class="comment-text">{{$com->description}}</div>
                        <div class="comment-footer">
                            <div class="comment-info">
                          <span class="comment-author">
                            <a href=></a>
                          </span>
                                <span class="comment-author">
                            {{$com->user->name}}
                          </span>
                                <span class="comment-date">{{jdate($com->created_at)->format('%A, %d %B %y')}}</span>

                            </div>

اینم کنترلر مربوط به سینگل پیج

 public function single(Product $product){
        $comment=$product->comments();
        $gallery=$product->gallery()->latest()->paginate(12);
        return view('shop.single',compact('product','gallery','comment'));
    }

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

یکجوری قاطع میفرمایید روابط درست هستند دیگه روم نمیشه اشتباهاتش رو بگم... 😅

در مدل Comment متد مربوط به ریلیشن کاربر باید اسمش user باشه نه users!

علت ارورتون هم همینه دقیقا. چون دارید اینجوری استفاده می‌کنید:

$comment->user->name

میاد سراغ مدل Comment میگرده دنبال متد user پیدا نمی‌کنه. null بر گردونه. بعدش که میخواهید name ش رو بگیرید ارور می‌خوره.


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

ارتباط بین همه و یا حداقل یکی از کامنت هاتون با user برقرار نشده به همین خاطر جایی که نوشتید com->user->name$ به مشکل می‌خوره. چون user رو نمیشناسه و طبیعتا name ش رو هم نمی تونه بگیره.

اول چک کنید که realtionship هاتون رو به درستی در مدل Comment ایجاد کردید یا نه.
و دوم چک کنید که فیلد user_id در جدول comments تون برای هیچ رکوردی null یا غیرمعتبر نباشه (منظور از غیرمعتبر آیدی هست که یوزری با اون id ثبت نشده باشه)


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش مطرح شد
0

@mhyeganeh معذرت می خوام .مهندس روابط درست هست این مدل User

 public function comments(){
        return $this->hasMany(Comment::class);
    }

واین هم مدل Comment

   protected $fillable=['description','approved','parent_id','commentable_id','commentable_type'];

    public function users(){
        return $this->belongsTo(User::class);
    }

این هم کنترلر سینگل پیج محصول که کامنت پاس دادم بهش

 public function single(Product $product){
        $comment=$product->comments();
        $gallery=$product->gallery()->latest()->paginate(12);
        return view('shop.single',compact('product','gallery','comment'));
    }

فیلد user_id هم در جدول کانت ثبت شده که id 18 هست که به اسم علی هست.
وقتی به جای {{ $com->user->name }} میگم {{ $com->user->id }} بازم ارور این بار مربوط به id میده


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

یکجوری قاطع میفرمایید روابط درست هستند دیگه روم نمیشه اشتباهاتش رو بگم... 😅

در مدل Comment متد مربوط به ریلیشن کاربر باید اسمش user باشه نه users!

علت ارورتون هم همینه دقیقا. چون دارید اینجوری استفاده می‌کنید:

$comment->user->name

میاد سراغ مدل Comment میگرده دنبال متد user پیدا نمی‌کنه. null بر گردونه. بعدش که میخواهید name ش رو بگیرید ارور می‌خوره.


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

متد single تون هم یکسری اصلاحات نیاز داره:

public function single(Product $product){
        $comment=$product->comments();
        $gallery=$product->gallery()->latest()->paginate(12);
        return view('shop.single',compact('product','gallery','comment'));
}
$comment = $product->comments();
// باید بشه:
$comments = $product->comments;

هم آخرش پرانتز نداشته باشه هم اسمش منطقا باید جمع باشه. پشت بندش در view هم باید اسمش رو به comments اصلاح کنید.

پیش فرض هم این هست که در مدل Product تون هم متد مروبط به رابطه comments رو درست نوشتید. چون تو کدهای ارسالیتون نبود اصلا.


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش مطرح شد
0

@mhyeganeh هرچی میکشم از این بی دقتی هست😂 سپاس از وقتی که گذاشتید مهندس جان🌼


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

سلامت باشید.
برای هر برنامه نویسی پیش میاد. از جونیور گرفته تا سنیور.

اما کلا سعی کنید با ارورهای لاراول هم آشنا بشید. انصافا در مقایسه با سایر فریم ورک ها و نسبت به قدیم یک هدیه ارزشمند و قیمتی محسوب میشه که باید قدرش رو دونست.

مثلا دیگه خاطرتون باشه هر وقت با اروری با این الگو ‍Attempt to read property "*" on null مواجه شدیدمعنیش چیه و کجا باید دنبال باگ گشت.

موفق باشید


علیرضا
تخصص : در حال یادگیری لاراول
@alirezamoghadam3180 3 سال پیش مطرح شد
0

@mhyeganeh سپاس فقط مهندس فرق

$comment = $product->comments();

و

$comment = $product->comments;

چیست منظورم اون پرانتز کاراییش هست؟


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

یکبار از هر کدومش dd بگیرید محتوای داخلش رو ببینید.

اولی متد هست که به شما relation رو بر می گردونه و هنوز کوئری اجرا نشده و شما می‌تونید بعدا بهش یکسری دستورات دیگه مثل where و paginate و ... اضافه کنید.
ولی در دومی دارید ازش بعنوان property استفاده می‌کنید که پشت صحنه با جادو جمبل های لاراول ترکیب میشه و کوئری مورد نظر ساخته و اجرا میشه و خود اطلاعات رو در قالب یک collection به شما میده که در این مثال بالا، چیزی هست که شما لازم دارید.


علیرضا
تخصص : در حال یادگیری لاراول
@alirezamoghadam3180 3 سال پیش مطرح شد
0

@mhyeganeh سپاس مهندس🌸🌸🌸🌸🙏🙏


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

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