Filtre sur une relation M2M

Bonjour à tous,

Je rencontre quelques problèmes pour effectuer un filtre sur une requête Directus.

J’ai une collection que je veux filtrer sur un paramètre simple et là pas de soucis :

{{serveur}}/items/fungus?filter[family][_eq]=1

Mais quand je veux filtrer sur une relation M2M, j’obtiens cette erreur :

{{serveur}}/items/fungus?filter[picking_period.picking_period_id][in]=9
{{serveur}}/items/fungus?filter[picking_period.picking_period_id][has]=9

"errors": [
        {
            "message": "\"fungus.picking_period.picking_period_id\" is not a relational field",
            "extensions": {
                "code": "INVALID_QUERY"
            }
        }
    ]

Même chose pour cette requête :

{{serveur}}/items/fungus?filter[picking_period][in]=9
{{serveur}}/items/fungus?filter[picking_period][has]=9

"errors": [
        {
            "message": "An unexpected error occurred.",
            "extensions": {
                "code": "INTERNAL_SERVER_ERROR"
            }
        }
    ]

Voici la réponse que j’obtiens si je n’applique pas les filtres :

"picking_period": [
            1,
            2,
            3
        ],

ou

"picking_period": [
            {
                "picking_period_id": 9
            },
            {
                "picking_period_id": 10
            },
            {
                "picking_period_id": 11
            }
        ]

Merci d’avance pour votre aide !!

Bonjour,

T’as plus d’info dans le mode debug (avec le .env) ou avec un debugger ? Les messages seront plus explicites je pense.
La comme ça, ça ne me dit rien. Peut-être que ça parlera à d’autres ceci dit.

Bonjour Martin,

Je suis sur Postman pour tester cette requête. Je ne vois pas de mode debug et j’ai regardé en console, j’ai pas plus d’infos …

Salut @Tazooou,

T’as plusieurs niveau de retour d’erreur dans la console directus, tu peux les choisir dans le LOG_LEVEL : What level of detail to log. One of fatal , error , warn , info , debug , trace or silent .

Par défaut, c’est sur info.

Tu peux avoir des détails sur cette page :

Je pense que tu auras un retour erreur plus précis pour savoir d’où vient le problème.

Je vais relire ça à tête reposé :slight_smile:
Je posterai les résultats si j’y arrive !
Thank’s.

Hello @Mrt1 ,
Je trouve pas le chemin d’accès vers ce fichier. Dans l’écran de Maxime hier soir, il affichait les dossiers de son serveur distant ou de son ordinateur ?
Le seul dossier Directus que j’ai, il se trouve dans mon serveur distant, j’ai rien sur mon mac …

Salut @Tazooou,

Normalement ce fichier ‹ .env › se situe dans le répertoire racine de ton projet Directus.
Si il est sur un serveur distant, c’est qu’il est potentiellement en fichier caché.
En te plaçant sur le répertoire racine, dans le Shell, tu peux faire un ls -al pour afficher les fichiers cachés + sous forme de listing (je trouve ça plus lisible).
tu devrais logiquement le voir apparaitre. Ou alors, tu peux aussi utiliser l’autocomplétion du terminal pour le trouver.

Exemple ci-dessous :

Ca y est, je l’ai trouvé :slight_smile:

J’ai rajouté le log level que j’ai mis à debug.

Je suis sensé voir plus d’info où ? dans la réponse du webservice ?

###############################################################################>
## General

PORT=8055
PUBLIC_URL="/"
LOG_LEVEL="debug"

###############################################################################>
## Database

DB_CLIENT="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="pickfungi"
DB_USER="pickfungi"
DB_PASSWORD="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


###############################################################################>
## Rate Limiting

RATE_LIMITER_ENABLED=false
RATE_LIMITER_STORE=memory
RATE_LIMITER_POINTS=25
RATE_LIMITER_DURATION=1

###############################################################################>
## Cache

CACHE_ENABLED=false

###############################################################################>
## File Storage

STORAGE_LOCATIONS="local"
STORAGE_LOCAL_DRIVER="local"
STORAGE_LOCAL_ROOT="./uploads"

###############################################################################>
## Security

KEY="xxxxx"
SECRET="xxxx"


ACCESS_TOKEN_TTL="15m"
REFRESH_TOKEN_TTL="7d"
REFRESH_TOKEN_COOKIE_SECURE=false
REFRESH_TOKEN_COOKIE_SAME_SITE="lax"
REFRESH_TOKEN_COOKIE_NAME="directus_refresh_token"

###############################################################################>
## Auth Providers

AUTH_PROVIDERS=""

###############################################################################>
## Extensions

EXTENSIONS_PATH="./extensions"

###############################################################################>
## Email

EMAIL_FROM="[email protected]"
EMAIL_TRANSPORT="sendmail"
EMAIL_SENDMAIL_NEW_LINE="unix"
EMAIL_SENDMAIL_PATH="/usr/sbin/sendmail"

Hello @mrt, @mbritto,

Une fois le mode debug configuré, faut-il relancer le serveur où les modifications sont prises en compte directement ? Où peut-on voir les traces d’erreurs supplémentaires ? dans la réponse du WS ?

Salut,

J’ai pas vérifié, mais ça doit être dans les logs normalement. Je ne sais pas si il faut relancer Directus.
Il me semble que tu peux les voir aussi dans les réponses du WS. J’ai pas touché directus depuis un petit moment et je n’ai pas vérifié de mon côté.
Tu as aussi un moyen avec les DevTools sur Chrome et/ou Firefox :

Normalement, quand tu lances la requête, tu devrais voir apparaitre les retours dans : soit les logs, soit la console. Eventuellement dans le devTools qui est très complet !

[Edit] ça devrait s’afficher dans la console/Terminal :

Hello tout le monde,
J’ai pas réussi à afficher ces fameuses log en mode debug mais … j’ai trouvé la solution à mon problème :slight_smile:

Je pose le résultat ici au cas où ca intéresse quelqu’un !

Si vous voulez filtrer sur un champs d’une table M2M, voilà la synthaxe à adopter :

{{serveur}}/items/fungus?filter[picking_period][picking_period_id][_in]=10,11,12
3 « J'aime »