سلام به همه دوستان
فرض کنیم من دو مدل Post و Comment دارم و بالطبع دو جدول با همین نام در دیتابیس وجود دارد
حالا می خوام متدی رو ایجاد کنم که تمام اطلاعات post و Comment ها رو واکشی کنم، البته از طریق API.
API رو ساختم و متدی رو در کنترلر صدا میزنه، سوال من اینجاست که اون متد رو چطور باید بنویسم.
از hasMany در این متد در مدل Post استفاده کردم اما فقط با متد find در کنترلر می تونم خروجی بگیرم که حتما باید یه آی دی بدیم و یک رکورد دریافت کنیم .
متد all و findAll هم خطا دارم کلا.
json باشه هر post و داخلش یه object دیگه که شامل comment هاش مثل نمونه زیر
{id:1,article:'how to manage the class1',comments:
{
{id:1, post_id:1,content:'first content'},
{id:2, post_id:1,content:'second content'},
{id:3, post_id:1,content:'third content'}
}
},
{id:2,article:'how to manage the class2',comments:
{
{id:3, post_id:2,content:'first content'},
{id:4, post_id:2,content:'second content'},
{id:5, post_id:2,content:'third content'}
}
},
{id:3,article:'how to manage the class3',comments:
{
{id:6, post_id:3,content:'first content'},
{id:7, post_id:3,content:'second content'},
{id:8, post_id:3,content:'third content'}
}
}
دوستان اگه می تونن راهنمایی کنن یا سورسی رو معرفی کنن .
متشکرم
مورد اول اینکه بجای
return $post->toJson();
از روش زیر استفاده کنید:
return response()->json($post);
اینجوری یکسری تنظیمات header و ... هم بصورت اتومات انجام میشه و بهتر و اصولی تر هست.
دوم اینکه شما اگر با استفاده از همون with رابطه های مورد نظرتون رو هم eagerload کرده باشید تو خروجی API بهشون بصورت کامل دسترسی خواهید داشت.
$post= Post::with('comments')->get();
return response()->json($post);
و آخر هم اینکه اگر ساختار خاص تری از خروجی مدنظرتون هست میتونید از حلقه foreach استفاده کنید و خروجی موردنظرتون رو بسازید. مثلا:
$posts = Post::with('comments')->get();
$data = [];
foreach ($posts as $post) {
$data [] = [
'post' => $post,
'comments' => $post->comments,
'posts_count' => $posts->count(),
//...
];
}
return response()->json($data);
ممنون از پاسختون،
از with در کنترلر استفاده کردم اما Comments ها رو نشون نمی ده
Post model
public function comments(){
return $this->hasMany(Comments::class,'postid','id');
}
Controller
$post= Post::with('comments')->get();
return $post->toJson();
مورد اول اینکه بجای
return $post->toJson();
از روش زیر استفاده کنید:
return response()->json($post);
اینجوری یکسری تنظیمات header و ... هم بصورت اتومات انجام میشه و بهتر و اصولی تر هست.
دوم اینکه شما اگر با استفاده از همون with رابطه های مورد نظرتون رو هم eagerload کرده باشید تو خروجی API بهشون بصورت کامل دسترسی خواهید داشت.
$post= Post::with('comments')->get();
return response()->json($post);
و آخر هم اینکه اگر ساختار خاص تری از خروجی مدنظرتون هست میتونید از حلقه foreach استفاده کنید و خروجی موردنظرتون رو بسازید. مثلا:
$posts = Post::with('comments')->get();
$data = [];
foreach ($posts as $post) {
$data [] = [
'post' => $post,
'comments' => $post->comments,
'posts_count' => $posts->count(),
//...
];
}
return response()->json($data);
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟