Laravel变形了许多条件和计数

时间:2018-06-30 18:10:14

标签: mysql laravel

我有两个表: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,则可以返回标签。

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();