Bonjour,
Savez-vous comment je peux récupérer une liste en fonction de plusieurs critères ? car avec :
_myMusic =
List<MusicModel>.from(await _apiManager.findListOfItems<MusicModel>(
filter: PropertyFilter(
field: "exploitant",
operator: FilterOperator.equals,
value: _directusUser.id),
));
return _myMusic.toList();
J’obtiens une première List, mais je dois ensuite la filtrer en fonction d’autres paramètres (3), ce qui reviendrait à produire 3 requêtes et à filtrer avec des For… mais il doit forcément y avoir plus simple non ? car ajouter plusieurs filtres dans la première requête n’est pas possible.
Merci !
Oui c’est prévu. Il faut que tu utilises un LogicialOperatorFilter
. Cet objet est une sous classe de Filter
et il a deux propriétés :
Par exemple, comme ci-dessous :
final Filter filter = LogicalOperatorFilter(
operator: LogicalOperator.or,
children: [
PropertyFilter(
field: "requestor",
operator: FilterOperator.equals,
value: _connectedUser!.id),
PropertyFilter(
field: "receiver",
operator: FilterOperator.equals,
value: _connectedUser!.id),
]));
ce filtre va me trouver tous les items de ma collection si requestor est égale à l’id de mon utilisateur ou si receiver est égale à l’id de mon utilisateur.
Merci @jmjoary ! Je vais jouer avec ça cet après-midi !
Mickaël.
kevint
Juillet 13, 2023, 6:12
4
Hello,
Est-ce que les filtres fonctionnent aussi sur les dates ?
J’essaie avec le code suivant :
final Filter filter =
await LogicalOperatorFilter(operator: LogicalOperator.and, children: [
PropertyFilter(field: "user_id", operator: FilterOperator.equals, value: userId),
PropertyFilter(field: "start_task", operator: FilterOperator.greaterThanOrEqual, value: start)
PropertyFilter(field: "end_task", operator: FilterOperator.lessThanOrEqual, value: end),
]);
Mes variables start et end sont bien de type DateTime.
Et j’obtiens à chaque fois une erreur 500 :
DirectusApiError (DirectusApiError : null : 500 {« errors »:[{« message »:« Maximum call stack size exceeded »,« extensions »:{« code »:« INTERNAL_SERVER_ERROR »}}]}
ça n’apporte pas de réponse, mais je viens de tester : j’ai exactement la même erreur, ça met le serveur en échec
kevint
Juillet 17, 2023, 7:51
6
Problème résolu en sur Directus 10.4.3 en « castant » les variables DateTime en String :
final Filter filter =
await LogicalOperatorFilter(operator: LogicalOperator.and, children: [
PropertyFilter(field: "user_id", operator: FilterOperator.equals, value: userId),
PropertyFilter(
field: "start_task",
operator: FilterOperator.greaterThanOrEqual,
value: firstDay.toString()),
PropertyFilter(
field: "end_task",
operator: FilterOperator.lessThanOrEqual,
value: lastDay.toString()),
]);
1 « J'aime »