雄辩哪里不问?

Posted

技术标签:

【中文标题】雄辩哪里不问?【英文标题】:eloquent where not in query? 【发布时间】:2015-06-20 23:57:11 【问题描述】:

我正在尝试用 eloquent 构建以下 sql 查询。该查询为我提供了 table_a 中的所有记录,这些记录在 ids 列表中,但未出现在 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))

那么我该如何在 eloquent 中做到这一点?我想避免使用原始查询。

//does not work
TableA::whereIn('id',$ids)
   ->whereNotIn('id', TableB::select('tabla_id')->whereIn($ids));

【问题讨论】:

Laravel Eloquent "WHERE NOT IN"的可能重复 whereNotIn 将数组作为第二个参数... RTFM @pc-shooter 不正确,它也需要关闭! @lukasgeiter OOpps,对我来说也是如此(重新)阅读 F* 手册...谢谢指点! 【参考方案1】:

要运行子查询,您必须传递一个闭包:

TableA::whereIn('id',$ids)
      ->whereNotIn('id', function($q)
          $q->select('tabla_id')
            ->from('tableb');
            // more where conditions
      )
      ->get();

【讨论】:

@pc-shooter 非常感谢。下次随意编辑这些明显的错别字;) 认为我不能只编辑其他用户帖子中的一个字符? 啊,我明白了……我已经超过了代表限制,所以我暂时忘记了 这样就好了,会有很多“just-code-formatting-or-one-two-chars-editing”

以上是关于雄辩哪里不问?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩的 ORM 群在哪里

php 雄辩的日期在哪里

mysql事务的理解学习, 面试不问索引原理就是事务原理

为啥卡巴斯基杀毒力强,好在哪里?

C++ 头文件包含 <> 路径

将总订单乘以jquery中的订单数量