我试图用eloquent构建以下sql查询。该查询为我提供了table_a中所有记录,这些记录位于id列表中,不会出现在table_b中。
select * from table_a
where id in (1,2,3)
and id not in
(select tablea_id from table_b
where tablea_id in (1,2,3))
那我该如何做到雄辩呢?我想避免使用原始查询。
//does not work
TableA::whereIn('id',$ids)
->whereNotIn('id', TableB::select('tabla_id')->whereIn($ids));
答案 0 :(得分:10)
要运行子查询,您必须传递一个闭包:
TableA::whereIn('id',$ids)
->whereNotIn('id', function($q){
$q->select('tabla_id')
->from('tableb');
// more where conditions
})
->get();