php - 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
解决方案
您将无法group by
使用该结构逃脱 a
$audiences = \DB::table("audience_tags")
->whereIn("tag", $request->tagIds)
->groupBy('audience')
->havingRaw('count(tag) = ?', count($request->tagIds))
->pluck('audience');
通过表audiences
和tags
声明,您可以利用和模型belongToMany
之间的关系(假设是表中的主键)Audience
Tag
tag_id
Tags
$tagIds = $request->tagIds;
$audiences = Audience::whereHas('tags', function($tag) use ($tagIds) {
$tag->whereIn('tag_id', $tagIds);
})->get(); //or pluck whatever attribute
推荐阅读
- python - 查找与线的点距离 - python
- android - 每次单击按钮时更改文本视图文本
- android - 通过 rememberSaveable State 编写的 Android Jetpack Compose 无法在后退按钮中存活
- c++ - 错误:使用未声明的标识符“实验性”
- python - 使用 biopython 从 genbank 文件中获取功能时出现 KeyError
- gnuradio - 使用 RTL 和 USRP 进行 DSB 调制/解调
- c# - 防止在文本框上使用多行键输入以防最大长度
- c++ - popper cpp的链接和包含问题
- java-stream - NextFlow: how to use inputStream with DSL2
- api - 获取 Facebook 的 api 以生成缩略图