【问题标题】: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 方法确实返回与您的模型相关的构建器。

标签: laravel model eloquent


【解决方案1】:

使用静态query方法:

$query = User::query();

此外,您可以使用when 方法将这些条件直接链接到查询构建器本身:

$results = SomeModel::query()->when(condition(), function ($query) {
    $query->where(...);
})->get();

这在功能上等同于命令式if 子句。

【讨论】:

    猜你喜欢
    • 2018-01-12
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多