Je crée un système d'enregistrement multi-rouleau. Et j'essaie d'énumérer tous les rouleaux existants. Ceux-ci doivent être triés en fonction du nombre d'autorisations qui leur ont été attribuées. (dans cet exemple: Utilisateur en premier, Modérateur en second et Admin troisième) Je ne peux pas définir les rouleaux dans le code car de nouveaux rouleaux peuvent être créés et les rouleaux existants peuvent être supprimés. (sauf pour l'utilisateur et le rôle d'administrateur)Laravel comportement bizarre orderByRaw (field())
Je récupère le nombre de permissions de tous les jets disponibles et les place dans un tableau avec l'identifiant du jet.
le tableau per_count renvoie les ids suivants:
2, 4, 3
Id de:
- 2 = Utilisateur
- 3 = Administrateur
- 4 = Modérateur
Cependant, Lorsque j'exécute la requête suivante:
Roll::orderByRaw("FIELD(id, ?)", array($per_count))->get()
Il renverse l'ordre et je reçois
- 3 Administrateur
- 4 Modérateur
- 2 L'utilisateur
Controller:
public function index()
{
// Check if user is authorized to use this action, else redirect to login page
$this->authorize_action(__FUNCTION__, $this->classname);
foreach (Roll::all() as $roll) {
$rollpermission['id'] = $roll->id;
$rollpermission['count'] = $roll->permissions->count();
$permission[] = $rollpermission;
}
$this->array_sort_by_column($permission, 'count');
$per_count = array();
foreach ($permission as $per) {
$per_count[] = $per['id'];
}
$foo = implode(', ', array_fill(0, count($per_count), '?'));
return view('roll')
->with('roll', Roll::orderByRaw("FIELD(id, " . $foo . ") desc", array_reverse($per_count))->get());
}
J'ai réussi à le faire fonctionner correctement avec la fonction array_reverse. Cependant, il est bâclé et ne devrait pas être nécessaire. Et je ne peux pas trouver la raison pour laquelle la requête inverse les résultats. Quelqu'un peut-il m'expliquer pourquoi les résultats sont inversés? Merci
Essayez d'utiliser 'DB: : enableSqlLog() ', puis faites votre requête Roll, puis' dd (DB :: getQueryLog()) 'pour afficher le sql en cours. –
Le résultat est "select * from" roll' order par FIELD (id,?) " –
Y at-il des paramètres? Ils seraient dans un autre index de la requête. –