我想返回一个Laravel集合对象的关系,其中得到的集合是基于嵌套标准(即嵌套模型的字段值)。因此,这将是这个样子:Laravel集合渴望加载基于嵌套关系字段值
用户 - >类别 - >发表 - >评论哪里comment.active == 1
在这种情况下,我想要的结果,包括所有的特定用户的categories => posts => comments
,评论处于活动状态。如果它处于活动状态,它将嵌套在适当的层次结构中(Category->Post->Comment
)。如果评论不活跃,则任何相关的帖子和潜在类别(如果没有其他活动评论的帖子)都不应该显示在该集合中。
我试过急于通过with()
,load()
和filter()
加载没有运气。他们将继续加载与空评论关系的关系。寻找有关研究的指导:加入?过滤器?先进的鸡蛋嵌套?
一个尝试:
$user->categories->filter(function($category) {
return $category->isActive();
});
在我的模型我所有的关系设置适当的,而且除了我所建立isActive()如下:
// Category model
public function isActive() {
$active = $this->posts->filter(function($post) {
return $post->isActive();
}
}
// Post model
public function isActive() {
return (boolean) $this->comments()->where('active', 1)->count();
}
这按预期工作,但它还包括急切加载的嵌套关系,其中注释的有效字段为0.显然,我以错误的方式执行此操作,但会欣赏任何方向。
的另一种尝试:
User::with(['categories.posts.comments' => function($q) {
$q->where('active', 1);
}])->find(1);
不幸的是,这还加载有没有活动的意见的关系(类别和职位)。用'categories.posts.isActive'取代关系也无效。
没有任何代码,没有人可以指导你,发布相关的型号代码。 –