如何在Laravel
中的eloquent或查询构建器中编写以下查询SELECT *
FROM creatives
WHERE creative_id IN (SELECT creative_id
FROM term_relationships
WHERE term_id IN (1, 2, 3)
GROUP BY creative_id
HAVING COUNT(*) = 3)
我的db模型具有为上述两个表定义的关系。这是2个表结构
Table 1: creatives
creative_id creative_name
1 xyz
2 pqr
3 abc
Table 2: term_relationships
creative_id term_id
1 1
1 2
1 3
2 1
2 2
2 4
我还需要对结果进行分页。
答案 0 :(得分:1)
对于更复杂的查询,特别是如果你已经构建了sql查询,我建议使用laravel的DB::statement
函数而不是eloquent。
DB::statement('
SELECT *
FROM creatives
WHERE creative_id IN (
SELECT creative_id
FROM term_relationships
WHERE term_id IN (1, 2, 3)
GROUP BY creative_id
HAVING COUNT(*) = 3
)
');
如果你真的喜欢Eloquent,这可以起作用:
Creatives::WhereIn('creative_id', function($query) {
$query->select('creative_id')
->from('term_relationships')
->whereIn('term_id', array(1, 2, 3))
->groupBy('creative_id')
->havingRaw('COUNT(*) = 3');
})->get();