2 votes

Laravel : Comment trier une collection éloquente en ignorant les articles d'une langue ?

Dans laravel, existe-t-il un moyen de trier la collection en ignorant les articles d'une langue (comme a, an, the en anglais ; el, la en espagnol ; etc.)

Je voulais quelque chose comme Tableaux jQuery pour les titres, mais je n'ai pu trouver que

Comment trier un tableau avec PHP, en ignorant les articles (a, an, the) au début ?

y Comment trier en SQL, en ignorant les articles ("the", "a", "an" etc) .

C'était bien si c'était un tableau, mais j'ai une collection avec pagination et cela n'aurait pas de sens de trier les résultats paginés, car cela ne trierait que les résultats limités au lieu d'une collection entière.

1voto

A.G. Points 41

La réponse de @Alexey résout le problème si vous n'avez pas de collection paginée, puisque j'ai eu la pagination, j'ai résolu le problème en utilisant orderByRaw() et la correspondance entre les cas des expressions régulières. J'espère que cela aidera quelqu'un dans une situation similaire.

$query->orderByRaw("CASE
                        WHEN title REGEXP '^("a|an|the|el|la")[[:space:]]' = 1 THEN
                            TRIM(SUBSTR(title, INSTR(title, ' ')))
                        ELSE title
                    END ASC");

0voto

Alexey Mezenin Points 86781

Vous pouvez passer une fermeture à la fonction sortBy() ou le sortByDesc() des méthodes :

$collection->sortBy(function ($i) {
    return trim(str_replace([' a ', ' an ', ' the ', ' el '], '', ' ' . $i['title'] . ' '));
});

Ce code ajoutera des espaces au début et à la fin d'une chaîne de caractères (c'est-à-dire title d'un objet ou d'un tableau d'une collection). Ensuite, il supprimera les articles et ne supprimera pas les mots contenant "an" ou "the" (ou un autre article) ou commençant ou se terminant par un article. Il supprime ensuite les espaces au début et à la fin de chaque chaîne. Enfin, il renvoie une collection triée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X