在使用"take"和"skip"之前获取Laravel's Eloquent中的行数

Gga*_*Gga 6 php count laravel eloquent

我想查询我的Laravel模型中使用雄辩的,可能需要匹配一些where子句,那么结果takeskip预设号码.

这本身不是问题,但我还需要知道在使用take和skip减少结果集之前在查询中找到的行数 - 所以原始匹配数可能是表中的每一行不使用where子句或使用其中一些子句.

我想做的事情可以通过两次查询来完成,第一次省略" ->take($iDisplayLength)->skip($iDisplayStart)"并计算,但这看起来很麻烦.

有什么想法吗?

$contacts = Contact::where(function($query) use ($request)
{

    if (!empty($request['firstname'])) {
        $query->where(function($query) use ($request)
        {
            $query->where('firstname', 'LIKE', "%{$request['firstname']}%");

        });
    }   

    if (!empty($request['lastname'])) {
        $query->where(function($query) use ($request)
        {
            $query->where('lastname', 'LIKE', "%{$request['lastname']}%");

        });
    }     

})
->take($iDisplayLength)->skip($iDisplayStart)->get();

$iTotalRecords = count($contacts);
Run Code Online (Sandbox Code Playgroud)

Jar*_*zyk 20

您可以在同一查询中使用countthen get.

顺便说一句,你的整个查询有点复杂.它导致这样的事情:

select * from `contacts` where ((`firstname` like ?) and (`lastname` like ?)) limit X, Y
Run Code Online (Sandbox Code Playgroud)

Closure in where用于进行这样的查询,例如:

select * from table where (X or Y) and (A or B);
Run Code Online (Sandbox Code Playgroud)

总结一下,你需要这个:

$query = Contact::query();

if (!empty($request['firstname'])) {
  $query->where('firstname', 'like', "%{$request['firstname']}%");
}

if (!empty($request['lastname'])) {
  $query->where('lastname', 'like', "%{$request['lastname']}%");
}

$count = $query->count();

$contacts = $query->take($iDisplayLength)->skip(iDisplayStart)->get();
Run Code Online (Sandbox Code Playgroud)

  • 但结果完全不同.最终得到的是stdObjects数组而不是Eloquent Collection. (2认同)
  • `$query->count` 在我的许多情况下都会返回错误的结果......可能是因为连接或其他任何原因,但不幸的是它绝对不是要走的路...... (2认同)