首页 > 解决方案 > Laravel Eloquent 方法对 mysql 表进行 AND 操作

问题描述

我是 Laravel 的新手。我有一个像这样的表 audience_tags :

tag  | audience
Tall | Anurag
Nice | Anurag
Tall | Kapil
Nice | Simon

所以,

If I query for ['Tall'] it should return Anurag, Kapil
If I query for ['Nice'] it should return Anurag, Simon
If I query for ['Tall', 'Nice'] it should only return Anurag

目前,我正在这样做:

$audienceIds = DB::table("audience_tags")->whereIn("tag", $request->tagIds)->pluck("audience");

但它为 ['Tall', 'Nice'] 返回了 Anurag、Kapil 和 Simon

标签: phpmysqllaraveleloquent

解决方案


您将无法group by使用该结构逃脱 a

$audiences = \DB::table("audience_tags")
    ->whereIn("tag", $request->tagIds)
    ->groupBy('audience')
    ->havingRaw('count(tag) = ?', count($request->tagIds))
    ->pluck('audience');

通过表audiencestags声明,您可以利用和模型belongToMany之间的关系(假设是表中的主键)AudienceTagtag_idTags

$tagIds = $request->tagIds;
$audiences = Audience::whereHas('tags', function($tag) use ($tagIds) {
    $tag->whereIn('tag_id', $tagIds);
})->get(); //or pluck whatever attribute

推荐阅读