web-dev-qa-db-fra.com

Éloquent - où égal à

J'utilise actuellement la dernière version de Laravel.

J'ai essayé les requêtes suivantes:

Code::where('to_be_used_by_user_id', '<>' , 2)->get()
Code::whereNotIn('to_be_used_by_user_id', [2])->get()
Code::where('to_be_used_by_user_id', 'NOT IN', 2)->get()

Idéalement, il devrait renvoyer tous les enregistrements sauf user_id = 2, mais il renvoie un tableau vide. Comment puis-je aborder cela?

Code::all()

Cela renvoie les 4 enregistrements.

Modèle de code:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Code extends Model
{

    protected $fillable = ['value', 'registration_id', 'generated_for_user_id', 'to_be_used_by_user_id', 'code_type_id', 'is_used'];

    public function code_type()
    {
        return $this->belongsTo('App\CodeType');
    }

}
78
aBhijit

Utilisez where avec un opérateur != en combinaison avec whereNull

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get()
160
lukasgeiter

Pour where field not empty cela a fonctionné pour moi:

->where('table_name.field_name', '<>', '')
15
Abduhafiz

Bien que cela semble fonctionner

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get();

vous ne devriez pas l'utiliser pour les grandes tables car, en règle générale, "ou" dans votre clause where empêche la requête d'utiliser l'index. Vous passez de "Recherche de clé" à "Analyse complète de table"

enter image description hereenter image description here

Au lieu de cela, essayez nion

$first = Code::whereNull('to_be_used_by_user_id');

$code = Code::where('to_be_used_by_user_id', '!=' , 2)
        ->union($first)
        ->get();
2