【问题标题】:Laravel 4 - How to fetch models with skip() / take() but no where clauseLaravel 4 - 如何使用 skip() / take() 但没有 where 子句获取模型
【发布时间】:2013-06-03 01:22:01
【问题描述】:

我目前正在使用 Laravel 4 开发一个 API,但在尝试过滤返回的用户列表时遇到了问题。让我困惑的是,L4 文档说

注意:查询构建器上可用的所有方法在查询 Eloquent 模型时也可用。

现在一些代码来清除一些东西:

    $since = Input::has('since') ? strtotime(Input::get('since')) : 0;
    $skip = (int)Input::get('skip');
    $take = (int)Input::get('take');

    if ($since) {
        $builder = User::where('updated_at', '>', date('Y-m-d H:i:s', $since));
    }
    else {
        $builder = new User();
    }

    if ($take > 0) {
        $builder->take($take);
    }
    if ($skip > 0 && $take > 0) {
        $builder->skip($skip);
    }

    return count($builder->get());

如您所见,我正在尝试根据不同的标准获取模型。每当提供 URL 参数 since 时,我打算返回自给定日期时间以来修改过的用户。

问题是,'skip' 和 'take' 参数在没有设置 'since' 的情况下不起作用。假设数据库中有3个用户,API返回

  • skip=1&take=10 => 3 个用户
  • since=2013-06-06 11:00:00skip=1&take=10 => 1 个用户(2 个已更新_at > 2013-06-06 11:00:00,但有一个被跳过)

不应该在第一种情况下返回 2 个用户(表中的 3 个,首先跳过)吗?

【问题讨论】:

    标签: model laravel laravel-4 eloquent


    【解决方案1】:

    当使用new User 时,您正在创建新模型。试试User::newQuery()。它应该返回用户模型的查询生成器。

    【讨论】:

    • 感谢您的建议。 newQuery() 方法确实解决了这个问题。注意:此方法不是静态的,因此我必须在用户实例上调用它:$user = new User(); $builder = $user->newQuery();
    • 我不确定该方法是否是静态的。很高兴它有帮助:)
    • 从 Laravel 5.2 开始,有一个等效的静态方法,简称为 query$builder = User::query();
    猜你喜欢
    • 2015-03-12
    • 1970-01-01
    • 2022-01-19
    • 2014-02-06
    • 2013-06-30
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2013-10-12
    相关资源
    最近更新 更多