سلام .
قراره نظرات تمام مقالاتو واسه ادمین نشون بدم .
به این صورت
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
سلام
شما یک کالکشن دارید نه یه آبجکت از کلاس Article
برای تمام کامنت ها از کد زیر استفاده کنید.
$comments = Comment::all();
سلام دوست عزیز فکر کنم مشکل شما این باشه که
return $articles->comments();
این وقتی کار میکنه که یه مقاله باشه و تمام کامنت هایه اون رو بر میگردونه اما شما بهش چندین تا مقاله دادید 🤔 خوب این جوری نمیشه دیگه
بهترین کار اینه که تمام کامنت هاتونو بگیرید (اگه فقط مال مقاله هستن همه) یا اینکه از خود کامنت هاتونو که برای مقالات هستن برگردونید
اگه میخواید اینجوری به کامنت ها دسترسی داشته باشید باید بزارید تو حلقه و همه رو با هم مرج کنید و اون رو برگردونید که شامل همه کامنت ها میشه
یه خورده فک کنم بد توضیح دادم ولی خلاصه کار اینه که این ارور بدیل اینه که اون توقع داره یدونه مقاله بگیره و نظراتشو برگردونه ولی شما یه
کالکشن از مقالات دارید بر میگردونید
این بنده خدا که خودش نمیره دونه دونه مال هر مقاله رو بگیره یکی کنه برگردونه که
سلام
شما یک کالکشن دارید نه یه آبجکت از کلاس Article
برای تمام کامنت ها از کد زیر استفاده کنید.
$comments = Comment::all();
دو تا نکته رو توجه داشته باشید:
۱- وقتی با یک کالکشن سر و کار دارید به این روش شدنی نیست و نیاز به یک حلقه 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
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟