直接从模型实例化查询构建器
Posted
技术标签:
【中文标题】直接从模型实例化查询构建器【英文标题】:Instance the query builder directly from model 【发布时间】:2016-02-27 18:39:55 【问题描述】:当我执行SomeModel::with('user')
之类的操作时,它会返回一个Query\Builder
实例。如何在无需调用with()
(或类似)的情况下获取此实例?
例如,我尝试过:new SomeModel
,但它显然会返回我的模型实例,而不是查询生成器(对我不起作用)。 SomeModel::getQuery
也不起作用,因为它返回的 Query\Builder
与我的模型无关。
我需要它来根据一些条件进行设置。所以最初它需要是empty,就像这样:
$someBuilder = SomeModel::getQueryBuilder(); // eg.
if(condition())
$someBuilder->where(...);
$someResults = $someBuilder->get();
【问题讨论】:
getQuery
方法确实返回与您的模型相关的构建器。
【参考方案1】:
使用静态query
方法:
$query = User::query();
此外,您可以使用when
方法将这些条件直接链接到查询构建器本身:
$results = SomeModel::query()->when(condition(), function ($query)
$query->where(...);
)->get();
这在功能上等同于命令式if
子句。
【讨论】:
以上是关于直接从模型实例化查询构建器的主要内容,如果未能解决你的问题,请参考以下文章