Comment vérifier si un champ n'est pas nul avec Eloquent?
J'ai essayé Model::where('sent_at', 'IS NOT', DB::raw('null'))->...
mais cela donne IS NOT
comme liaison au lieu d'une comparaison.
Voici ce que DB::getQueryLog()
en dit:
'query' => string 'select * from my_table where sent_at = ? and profile_id in (?, ?) order by created_at desc' (length=101)
'bindings' =>
array (size=3)
0 => string 'IS NOT' (length=6)
1 => int 1
2 => int 4
Eloquent a une méthode pour cela (Laravel 4. */5. *);
Model::whereNotNull('sent_at')
Laravel 3:
Model::where_not_null('sent_at')
Si quelqu'un comme moi veut le faire avec le constructeur de requêtes dans Laravel 5.2.23, il peut être fait comme ->
$searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null
Ou avec portée dans le modèle:
public function scopeNotNullOnly($query){
return $query->where('status_message', '<>', '');
}
On peut utiliser
Model::whereNotNull('sent_at');
Ou
Model::whereRaw('sent_at is not null');
Je vois que la question est un peu vieille mais je l’ai parcourue pour trouver une réponse. Même si je n'ai pas eu de succès avec les réponses ici, je pense que c'est peut-être parce que je suis sur PHP 7.2 et Laravel 5.7. ou possible parce que je jouais avec des données sur la CLI avec Laravel Tinker.
J'ai essayé certaines choses qui ont fonctionné pour moi et d'autres qui ne l'ont pas fait, j'espère, aideront les autres .
MyModel::whereNotNull('deleted_by')->get()->all(); // []
MyModel::where('deleted_by', '<>', null)->get()->all(); // []
MyModel::where('deleted_by', '!=', null)->get()->all(); // []
MyModel::where('deleted_by', '<>', '', 'and')->get()->all(); // []
MyModel::where('deleted_by', '<>', null, 'and')->get()->all(); // []
MyModel::where('deleted_by', 'IS NOT', null)->get()->all(); // []
Toutes les réponses ci-dessus ont renvoyé un tableau vide pour moi
DB::table('my_models')->whereNotNull('deleted_by')->get()->all(); // [ ... ]
Cela a retourné tous les résultats dans un tableau comme je m'y attendais. Remarque: vous pouvez supprimer la all()
et récupérer un Illuminate\Database\Eloquent\Collection au lieu d'un tableau si vous préférez.
$searchResultQuery = Users::query();
$searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
$searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null
dans laravel 5.4 ce code Model :: whereNotNull ('column') ne fonctionnait pas, vous devez ajouter get () comme celui-ci Model :: whereNotNull ('column') -> get (); celui-ci fonctionne bien pour moi :)