راکت
حل
3 پاسخ

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

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

 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


ثبت پرسش جدید
saman
saman
@saman11115 سال پیشمطرح شد
0

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

$comments = Comment::all();

علی قنواتی
علی قنواتی
تخصص :توسعه دهنده وب , لاراول
@aligh5 سال پیشمطرح شد
0

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

return $articles->comments();

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

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


saman
saman
@saman11115 سال پیشمطرح شد
0

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

$comments = Comment::all();

محمدحسن یگانه
محمدحسن یگانه
تخصص :Full-Stack Web Developer Freelancer
@mhyeganeh5 سال پیشمطرح شد
2

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

۱- وقتی با یک کالکشن سر و کار دارید به این روش شدنی نیست و نیاز به یک حلقه 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

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

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