Obtenir le nombre de lignes dans Laravel est Éloquent avant à l'aide de “prendre” et “skip”

Je veux requête de mon Laravel modèle à l'aide de éloquent pour que les résultats qui peuvent en avoir besoin pour correspondre à certaines des clauses where, puis take et skip numéros prédéfinis.

Ce n'est pas un problème en soi, mais j'ai aussi besoin de savoir le nombre de lignes qui ont été trouvés dans la requête avant de réduire le jeu de résultats avec les et passez - donc, à l'origine nombre de matchs qui pourraient être chaque ligne de la table, si pas où les clauses sont utilisées ou quelques si l'un est utilisé.

Ce que je veux faire pourrait être accompli en faisant la requête de deux fois, la première en omettant "->take($iDisplayLength)->skip($iDisplayStart)" à la fin du comptage, mais qui semble tout à fait désordonnée.

Toutes les pensées?

$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);
  • Appelez simplement count et take()->skip()->get(), ce qui est salissant à ce sujet?
  • Comment voulez-vous dire désolé? Sûrement que je serais obligé de répéter l'ensemble de l' -- $contacts = Contact::où(function($query) use ($request) .... - une partie à chaque fois?
  • Non, vous ne le font pas. Vérifier ma réponse