یلدا ادامه داره... ❤️ ۴۰ درصد تخفیف همه دورهها
استفاده از تخفیفهاعرض ادب بنده در بخش کامنت می خوام نام شخص ایجاد کننده کامنت برگردونم ارور زیر میاد نمی دونم مشکل چیه؟
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'));
}
یکجوری قاطع میفرمایید روابط درست هستند دیگه روم نمیشه اشتباهاتش رو بگم... 😅
در مدل Comment متد مربوط به ریلیشن کاربر باید اسمش user باشه نه users!
علت ارورتون هم همینه دقیقا. چون دارید اینجوری استفاده میکنید:
$comment->user->name
میاد سراغ مدل Comment میگرده دنبال متد user پیدا نمیکنه. null بر گردونه. بعدش که میخواهید name ش رو بگیرید ارور میخوره.
ارتباط بین همه و یا حداقل یکی از کامنت هاتون با user برقرار نشده به همین خاطر جایی که نوشتید com->user->name$
به مشکل میخوره. چون user رو نمیشناسه و طبیعتا name ش رو هم نمی تونه بگیره.
اول چک کنید که realtionship هاتون رو به درستی در مدل Comment ایجاد کردید یا نه.
و دوم چک کنید که فیلد user_id در جدول comments تون برای هیچ رکوردی null یا غیرمعتبر نباشه (منظور از غیرمعتبر آیدی هست که یوزری با اون id ثبت نشده باشه)
@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 میده
یکجوری قاطع میفرمایید روابط درست هستند دیگه روم نمیشه اشتباهاتش رو بگم... 😅
در مدل Comment متد مربوط به ریلیشن کاربر باید اسمش user باشه نه users!
علت ارورتون هم همینه دقیقا. چون دارید اینجوری استفاده میکنید:
$comment->user->name
میاد سراغ مدل Comment میگرده دنبال متد user پیدا نمیکنه. null بر گردونه. بعدش که میخواهید name ش رو بگیرید ارور میخوره.
متد 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 رو درست نوشتید. چون تو کدهای ارسالیتون نبود اصلا.
سلامت باشید.
برای هر برنامه نویسی پیش میاد. از جونیور گرفته تا سنیور.
اما کلا سعی کنید با ارورهای لاراول هم آشنا بشید. انصافا در مقایسه با سایر فریم ورک ها و نسبت به قدیم یک هدیه ارزشمند و قیمتی محسوب میشه که باید قدرش رو دونست.
مثلا دیگه خاطرتون باشه هر وقت با اروری با این الگو Attempt to read property "*" on null
مواجه شدیدمعنیش چیه و کجا باید دنبال باگ گشت.
موفق باشید
@mhyeganeh سپاس فقط مهندس فرق
$comment = $product->comments();
و
$comment = $product->comments;
چیست منظورم اون پرانتز کاراییش هست؟
یکبار از هر کدومش dd بگیرید محتوای داخلش رو ببینید.
اولی متد هست که به شما relation رو بر می گردونه و هنوز کوئری اجرا نشده و شما میتونید بعدا بهش یکسری دستورات دیگه مثل where و paginate و ... اضافه کنید.
ولی در دومی دارید ازش بعنوان property استفاده میکنید که پشت صحنه با جادو جمبل های لاراول ترکیب میشه و کوئری مورد نظر ساخته و اجرا میشه و خود اطلاعات رو در قالب یک collection به شما میده که در این مثال بالا، چیزی هست که شما لازم دارید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟