راکت
حل شده

فراخوانی فانکشن در رابطه one to many لاراول

3 پاسخ

سلام .
قراره نظرات تمام مقالاتو واسه ادمین نشون بدم .
به این صورت

 public function show()
    {
       $articles = Article::all();
       return $articles->comments();
    }

کدهای مدل :

 public function comments()
    {
        return $this->hasMany('App\Comment');
    }

اما ارور زیر رو میده

 Method Illuminate\Database\Eloquent\Collection::comments does not exist. 

مشکل از کجاست ؟
@ali.bayat
@endworld
@mhyeganeh
@saman1111

ثبت پرسش جدید

پاسخ‌ها

3
saman
saman
@saman1111
بهترین پاسخ

سلام
شما یک کالکشن دارید نه یه آبجکت از کلاس Article
برای تمام کامنت ها از کد زیر استفاده کنید.

$comments = Comment::all();
علی قنواتی
علی قنواتی
@aligh

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

سلام دوست عزیز فکر کنم مشکل شما این باشه که

return $articles->comments();

این وقتی کار میکنه که یه مقاله باشه و تمام کامنت هایه اون رو بر میگردونه اما شما بهش چندین تا مقاله دادید 🤔 خوب این جوری نمیشه دیگه
بهترین کار اینه که تمام کامنت هاتونو بگیرید (اگه فقط مال مقاله هستن همه) یا اینکه از خود کامنت هاتونو که برای مقالات هستن برگردونید
اگه میخواید اینجوری به کامنت ها دسترسی داشته باشید باید بزارید تو حلقه و همه رو با هم مرج کنید و اون رو برگردونید که شامل همه کامنت ها میشه

یه خورده فک کنم بد توضیح دادم ولی خلاصه کار اینه که این ارور بدیل اینه که اون توقع داره یدونه مقاله بگیره و نظراتشو برگردونه ولی شما یه
کالکشن از مقالات دارید بر میگردونید
این بنده خدا که خودش نمیره دونه دونه مال هر مقاله رو بگیره یکی کنه برگردونه که

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

دو تا نکته رو توجه داشته باشید:

۱- وقتی با یک کالکشن سر و کار دارید به این روش شدنی نیست و نیاز به یک حلقه foreach دارید تا بتونید نظرات مربوط به هر مقاله رو دریافت کنید.

۲- برای گرفتن کامنت های یک مقاله نباید از پرانتز جلوی comments استفاده کنید.

پس یک راه اینه که در کنترلر این طوری بنویسید:

$articles = Article::with('comments')->get();

و در سمت فرانت اند، با یک حلقه foreach بصورت جداگانه به کامنت های هر مقاله اشاره کنید. مثلا در Blade میشه اینجوری:

@foreach($articles as $article)

    {{ $article->title }}
    {{ $article->body}}

    @foreach($article->comments as $comment )
        {{ $comment ->body }}
    @endforeach

@endforeach

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

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

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