Obecnie używam najnowszej wersji Laravel.
Próbowałem następujących zapytań:
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()
W idealnym przypadku powinno zwrócić wszystkie rekordy z wyjątkiem user_id = 2
, ale zwraca pustą tablicę. Jak sobie z tym poradzić?
Code::all()
Zwraca wszystkie 4 rekordy.
Model kodu:
<?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');
}
}
Na
where field not empty
to zadziałało dla mnie:źródło
Chociaż wydaje się, że działa
nie należy go używać do dużych tabel, ponieważ zgodnie z ogólną zasadą „or” w Twojej klauzuli where zatrzymuje zapytanie w celu użycia indeksu. Przechodzisz od „wyszukiwania klucza” do „pełnego skanowania tabeli”
Zamiast tego wypróbuj Union
źródło
Lub tak:
źródło