Laravel 4 - 如何使用skip()/ take()但不使用where子句获取模型

时间:2013-06-06 21:06:02

标签: model laravel laravel-4 eloquent

我目前正在使用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参数时,我打算返回自给定日期时间以来修改过的用户。

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

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

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

1 个答案:

答案 0 :(得分:3)

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