我有两个表:Posts和Pages,它们共享一个表用于标记(morphToMany)。
我的表格和关系:
表:标签 ID,名称
public function posts()
{
return $this->morphedByMany('App\Post', 'taggable');
}
public function pages()
{
return $this->morphedByMany('App\Page', 'taggable');
}
表:帖子 ID,名称,有效
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}
表格:页面 ID,名称,有效
public function tags()
{
return $this->morphToMany('App\Tag', 'taggable');
}
如何从pages.active和posts.active 这两个表中获取所有标签并计数
我尝试了此查询,但是此查询仅返回两个模型中的标记:
Tag::whereHas("posts", function($q) {
$q->where("posts.active", "=", 1);
})->whereHas("pages", function($q) {
$q->where("pages.active", "=", 1);
})->get();
我需要一个查询,如果其中一个模型存在,但其中active = 1,则可以返回标签。
答案 0 :(得分:1)
您可以尝试
$tags = Tag::where( function( $query ){
$query->whereHas('posts', function ( $subquery ){
$subquery->where('active', 1 );
})
->orWhereHas('pages',function ( $subquery ){
$subquery->where('active', 1 );
});
})->withCount('posts','pages')->get();