How to create a subquery using Laravel Eloquent?(如何使用 Laravel Eloquent 创建子查询?)
问题描述
我有以下 Eloquent 查询(这是一个查询的简化版本,它由更多的 where
和 orWhere
组成,因此明显的迂回方式这 - 理论很重要):
I have the following Eloquent query (This is a simplified version of a query which consists of of more where
s and orWhere
s hence the apparent roundabout way of going about this - the theory is what's important):
如您所见,我选择
发生在我的start_date
或之后的最早日期.这会导致运行单独的查询以获取此日期,然后将其用作主查询中的参数.有没有一种雄辩的方法可以将查询嵌入在一起形成一个子查询,从而只有 1 个数据库调用而不是 2 个?
As you can see I pluck
the earliest date that occurs on or after my start_date
. This results in a seperate query being run to get this date which is then used as a parameter in the main query. Is there a way in eloquent to embed the queries together to form a subquery and thus only 1 database call rather than 2?
根据@Jarek 的回答,这是我的查询:
As per @Jarek's answer this is my query:
orWhere
块导致查询中的所有参数突然变得不带引号.例如.WHERE
price_date>= 2009-09-07
.当我删除 orWheres
时,查询工作正常.这是为什么?
The orWhere
blocks are causing all parameters in the query to suddenly become unquoted. E.g. WHERE
price_date>= 2009-09-07
. When I remove the orWheres
the query works fine. Why is this?
推荐答案
这是您在以下位置执行子查询的方式:
This is how you do a subquery where:
不幸的是orWhere
需要明确提供$operator
,否则会引发错误,所以在你的情况下:
Unfortunately orWhere
requires explicitly provided $operator
, otherwise it will raise an error, so in your case:
<小时>
实际上你需要在闭包中指定from
,否则它不会构建正确的查询.
You need to specify from
in the closure in fact, otherwise it will not build correct query.
这篇关于如何使用 Laravel Eloquent 创建子查询?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!