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
ettake()->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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
count
puisget
sur la même requête.Et par la manière, l'ensemble de votre requête est un peu plus compliqué. Il en résulte quelque chose comme ceci:
Fermeture en
where
est utilisé pour faire une requête comme ceci par exemple:Donc, pour résumer, vous avez besoin de ceci:
$query->count
retourne le mauvais résultat dans beaucoup de mon cas... peut-être en raison de jointures ou quoi que ce soit, mais ce n'est certainement pas la voie à suivre, malheureusement...La
Collection
classe offre une épissure et un nombre de la méthode que vous pouvez prendre avantage de.D'abord, vous voulez obtenir la collection..
Ensuite, vous pouvez obtenir le nombre et le sectionner.
Cela peut être difficile sur les performances, car vous êtes l'interrogation de l'ensemble de la collection, à chaque fois, plutôt que de mettre une limite sur la requête, de sorte qu'il pourrait être bénéfique pour la collection de cache si cette page va être frappé souvent. Dans le même temps, ce sera frappé de la base de données qu'une seule fois, donc c'est un peu de hors commerce.