【问题标题】:How to dynamically query an Eloquent model?如何动态查询 Eloquent 模型?
【发布时间】:2014-06-05 14:44:54
【问题描述】:

概要

我正在尝试过滤我的记录结果。我搜索了谷歌并偶然发现了this post

我有一个用户表,其中有 一个 记录 处于活动状态。

// Example 1:
$model = with(new User);
$model->where('is_active', '=', 0);

dd($model->count()); // Output: 1 (Expected: 0)

// Updated (for argument sake):
dd($model->get()->count()); // Output: 1 (Expected: 0)

但是,当我执行以下操作时,我会得到正确的结果:

// Example 2:
dd(User::where('is_active', '=', 0)->count() ); //Output: 0 (As expected);

我正在尝试做什么(伪代码):

// Example 3:
public static function getFiltered()
{
    $model = with(new static);

    // This is obviously populated but for argument sake.
    $filters = array(
        'is_active' => 1,
    );

    foreach ( $filters as $filter => $value ) {
        $model->where($filter, '=', $value);
    }

    return $model;
}

我想我的问题是为什么 示例 1 不起作用?

请记住,链接的问题有一个可接受的答案,表明我的第一个示例应该有效。

【问题讨论】:

    标签: laravel-4 eloquent


    【解决方案1】:

    我想我的问题是为什么示例 1 不起作用?请记住,链接的问题有一个公认的答案,表明我的第一个示例应该有效

    否 - 链接接受的答案与您的示例 1 不同。

    您的示例 1 应该是这样的:

    $model = new User;
    $newmodel = $model->where('is_active', '=', 0)->get();
    dd($newmodel->count());
    

    我想我的问题是为什么示例 1 不起作用?

    因为你已经应用了where() 查询,但是你没有get() 得到结果。

    【讨论】:

    • 实际上,是的,链接的答案与我的问题相似。即使使用get(),我仍然得到相同的结果。 get() 未执行的事实无关紧要,问题似乎在于使用静态 where 与非静态 where 之间。
    • 我修正了我的答案。问题是你正在做“新模型”——这意味着“那个”模型的计数将为 1。如果您获得新结果并将其分配给新变量,则它会按预期工作。我刚刚测试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多