web-dev-qa-db-fra.com

Comment vérifiez-vous "sinon nul" avec Eloquent?

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
163
Marwelln

Eloquent a une méthode pour cela (Laravel 4. */5. *);

Model::whereNotNull('sent_at')

Laravel 3:

Model::where_not_null('sent_at')
306
Bas de Groot

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', '<>', '');
}
15
Atiqur

On peut utiliser

Model::whereNotNull('sent_at');

Ou

Model::whereRaw('sent_at is not null');
2
srmilon

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 .


Je n'ai pas réussi à courir:

    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


J'ai cependant eu du succès en cours d'exécution:

    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. 

0
Anovative
$searchResultQuery = Users::query(); 
 $searchResultQuery->where('status_message', '<>', '', 'and'); // is not null
 $searchResultQuery->where('is_deleted', 'IS NULL', null, 'and'); // is null 
0
pardeep

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 :)