DATA2
5 سال پیش توسط DATA2 مطرح شد
6 پاسخ

عدم نمایش کامنت‌های child در polymorphic در لاراول

سلام
من برای بخش کامنت‌ها از polymorphic استفاده می کنم. کامنت‌های اصلی به درستی کار می کنن ولی برای نمایش کامنت‌های تو در تو اجرا نمیشه و آرایه خالی رو بر می گردونه.
کد زیر رو داخل مدل Comment تعریف کردم.

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

و در کنترلر Articleها با استفاده در ستور زیر در single page اطلاعات رو return می کنم. با اینکه parent_id بیشتر از 0 هست ولی کامنت‌های child رو نشون نمیده.

$comments = $article->comments()->where('approved', 1)->where('parent_id', 0)->latest()->with(['comments' => function ($query) {
            $query->where('approved', 1)->latest()->get();
        }])->get();

میخواستم بدونم ایراد از کجاست؟


ثبت پرسش جدید
mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
0

به مثال خود داکیونت لاراول مراجعه کنید. دقیقا واسه ساخت سیستم کامنت مثال زده.

https://laravel.com/docs/5.8/eloquent-relationships#one-to-many-polymorphic-relations


DATA2
@myzerone2 5 سال پیش مطرح شد
0

شما مثل اینکه دقت نکردی. گفتم اصل کد اجرا میشه. کامنتهای child رو شناسایی نمیکنه...


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
0

کد رو به صورت زیر تغییر بدید و تست کنید:

$comments = $article->comments()->where('approved', 1)->where('parent_id', 0)->latest()->with(['comments' => function ($query) {
            $query->where('approved', 1)->latest();
        }])->get();

DATA2
@myzerone2 5 سال پیش مطرح شد
0

الان این کد با کدی که خودم اون بالا گفتم کار نمیکنه چه فرقی داره؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

در کوئری بالا ، شما گزینه approved رو ۲ بار چک کردید و همچنین شما دارین کوئری رو درخواست می‌کنید با parent_id 0 .. چطور انتظار دارید کامنت‌های تو در تو که parent_id غیر 0 دارند رو دریافت کنید؟


mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 5 سال پیش مطرح شد
1

@ali.bayat
کامنت هایی که پرنت ایدی ۰ دارند خودشون پرنت هستن. به ازای هر پرنت میخواد فرزنداشو لود کنه.
اومده اول پرنت ها رو گرفته بعدش با with چایلدهای هر پرنت رو لود کرده.


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

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