直接从模型实例化查询构建器

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 子句。

【讨论】:

以上是关于直接从模型实例化查询构建器的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中数据库查询构建器的位置

如何将数据库查询构建器转换为 Eloquent 模型

PyTorch实例2——文本情绪分类器

PyTorch实例2——文本情绪分类器

Laravel:使用模型查询构建器获取重复记录的结果

从构建器方法调用的类型提示方法