我尝试在我的资源数组中包含一个关系,如果它已被急切加载,但不能让它工作。
任何人都有一个想法,我如何检查ResourceCollection中的关系?
这是我的帖子模型
class Post extends Model
{
function categories() {
return $this->belongsToMany('App\Category');
}
}
这是我的分类模型
class Category extends Model
{
function posts() {
return $this->belongsToMany('App\Post');
}
}
这是我的帖子控制器
Class PostController extends Controller
{
public function index()
{
return new PostResourceCollection(Post::with("categories")->get());
}
}
这是我的Post ResourceCollection
class PostResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'data' => $this->collection->transform(function($page){
return [
'type' => 'posts',
'id' => $page->id,
'attributes' => [
'name' => $page->title,
],
];
}),
//'includes' => ($this->whenLoaded('categories')) ? 'true' : 'false',
//'includes' => ($this->relationLoaded('categories')) ? 'true' : 'false',
];
}
}
答案 0 :(得分:0)
您的关系错误,帖子属于多个类别,而某个类别包含多个帖子所以更改:
class Category extends Model
{
function posts() {
return $this->belongsToMany('App\Post', 'category_post');
}
}
到
class Category extends Model
{
function posts() {
return $this->hasMany('App\Post', 'category_post');
}
}
现在,当你加载帖子时,你也可以加载类别:
$posts = Post::with('categories')->get();
答案 1 :(得分:0)
来自 docs您需要定义函数,如下面的代码:
class PostResourceCollection extends ResourceCollection
{
public function toArray($request)
{
return [
'type' => 'posts',
'id' => $page->id,
'attributes' => [
'name' => $page->title,
],
'categories' => Post::collection($this->whenLoaded('categories')),
];
}
}
如果尚未加载关系,则
categories
密钥将在发送到客户端之前完全从资源响应中删除。