راکت

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

6 پاسخ

سلام
من برای بخش کامنت‌ها از 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();

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

ثبت پرسش جدید

پاسخ‌ها

6
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

DATA2
DATA2
@myzerone2

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

شاید پاسخ شما همین‌جا باشد

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

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

علی بیات
علی بیات
@ali.bayat

تخصص: توسعه دهنده ارشد وب

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

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

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