0
votes

Comment limiter le nombre de lignes pour une valeur de clé étrangère spécifique à Laravel

Nous avons une table d'articles et user_id est la clé étrangère Par exemple, je souhaite choisir des messages pour ces utilisateurs xxx

mais je veux que l'utilisateur 1 et 2 n'a que deux messages dans la sortie, pour le reste des utilisateurs il n'y a pas de nombre limité de messages.

REMARQUE: Les utilisateurs 1 et 2 ne sont pas toujours dans le tableau $ UTILISATEURS , et en raison de la condition, l'un ou les deux peut ne pas être dans la matrice.

Avez-vous une solution pour moi?


8 commentaires

Utilisateur 1 et utilisateur 2 Tous les deux auront 2 messages chacun ou ils auront deux messages combinés?


Est-ce toujours 1 et 2 qui doit être limité à deux messages? Et quels posteront-ils les deux premiers postes ou les deux derniers postes?


@Mozammil utilisateur 1 deux messages et utilisateur 2 deux messages au total 4 messages


@Rehan Oui, c'est toujours 1 et 2, et les deux derniers messages de ces utilisateurs doivent être sélectionnés.


Qu'avez-vous essayé? Montrez-nous votre code. donc n'est pas un service d'écriture de code .


@ Sickanic je voulais utiliser l'Union, mais comme il a été utilisé pour un autre résultat, j'essaie de trouver une meilleure solution


Montrez-nous votre code. Veuillez visiter le centre d'aide et lire Comment demander et comment créer un Exemple minimal, complet et vérifiable .


@ Sickpanic merci, je vérifierai à nouveau


5 Réponses :


0
votes

Vous pouvez le faire en utilisant -> prendre () xxx

lire plus sur https://laravel.com/docs/5.7/Quiseries


7 commentaires

N'est-il pas recommandé d'exécuter des requêtes dans une boucle. Il doit être évité à tout prix.


Dans cette réponse, vous pouvez filtrer le nombre de postes que vous souhaitez obtenir pour le utilisateur 1 et utilisateur 2 à l'aide du -> prendre () et le reste prendra tout le post.


@Rehan, o je vois? Mais puis-je demander pourquoi?


Même si cela prend, les requêtes fonctionnent dans une boucle qui doit être évitée.


Si supposons que vous avez 100k lignes, les questions doivent exécuter 100k fois et effets les performances de l'application,


Il est recommandé d'aller chercher les données dans une seule requête puis de la modifier à l'aide de la boucle.


Vérifiez ma réponse pour la solution.



0
votes

Vous pouvez essayer cette alternative: xxx


2 commentaires

Ceci nous n'obtenons pas les deux derniers articles en tant que OP demanda à l'utilisateur [1,2]


@Maraboc merci, laissez-moi vérifier cela



1
votes

Vous ne pouvez pas y parvenir dans une seule requête, nous devons le prendre séparément comme celui-ci xxx


2 commentaires

Vérifiez cela et laissez-moi savoir si cela a été utile @Vajiheh habibi


Merci, laissez-moi vérifier cela



0
votes

Essayez cette méthode: xxx pré>

Si vous souhaitez obtenir le dernier message code> Utiliser cela à la place: P>

$posts[] = Post::whereIn('user_id', [1,2])->latest('created_at')->take(2)->get();


0 commentaires

0
votes

Vous pouvez également utiliser le groupe de paramètres comme celui-ci

DB::table('post')
            ->whereIn('user_id', $users)
            ->where(function ($query) {
                $query->whereIn('user_id', [1,2])->limit(2)
                      ->orWhereNotIn('user_id', [1,2]);
            })
            ->get();


0 commentaires