web-dev-qa-db-fra.com

Laravel Éloquent OR OÙ IS PAS NULL

J'utilise le package administrateur Laravel de frozennode. Pour résumer, je rencontre des problèmes lors de l'affichage des résultats supprimés de manière progressive. J'essaie de remplacer la requête par défaut:

select * from `scripts` where `scripts`.`deleted_at` is null group by `scripts`.`id`

Pour afficher à la fois les résultats supprimés et non supprimés, en quelque sorte piratage Ce n'est pas la solution la plus élégante mais je ne vois pas d'autre moyen de le faire. Donc, mon objectif est de faire ceci:

select * from `scripts` where `scripts`.`deleted_at` is null or `scripts`.`deleted_at` is not null group by `scripts`.`id`

Malheureusement, je ne sais pas comment utiliser orWhere () avec "n'est pas nul". Après quelques recherches, je l’ai essayé avec un bloc SQL brut, comme ceci:

'query_filter'=> function($query) {
    $query->orWhere(DB::raw('`scripts`.`deleted_at` is not null'));
},

Mais je me suis retrouvé avec un morceau de SQL supplémentaire résultant de l'inclusion du second paramètre dans orWhere ():

select * from `scripts` where `scripts`.`deleted_at` is null or `scripts`.`deleted_at` is not null **is null** group by `scripts`.`id`

Comment puis-je réparer cela?

11
Anonymous

Ajoutez simplement withTrashed:

'query_filter'=> function($query) {
    $query->withTrashed();
},

La source

Mettre à jour

Dans ce cas, vous pouvez probablement simplement ajouter un appel orWhereNotNull():

'query_filter'=> function($query) {
    $query->orWhereNotNull('deleted_at');
},
20
Jeff Lambert