雄辩 - 不等于

aBh*_*jit 87 laravel eloquent

我正在使用最新的Laravel安装.

我的表结构如下:https://www.uploady.com/#!/ download/OQSH4ualzUD/x2SIqdcaulqzSSsy

我试过这些查询:

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()
Run Code Online (Sandbox Code Playgroud)

理想情况下,它应返回最后3条记录.但它返回空白数组.我该如何解决这个问题?请帮忙.

Code::all()
Run Code Online (Sandbox Code Playgroud)

返回所有4条记录.

代码模型:

<?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');
    }

}
Run Code Online (Sandbox Code Playgroud)

luk*_*ter 174

使用where!=结合运营商whereNull

Code::where('to_be_used_by_user_id', '!=' , 2)->orWhereNull('to_be_used_by_user_id')->get()
Run Code Online (Sandbox Code Playgroud)

  • 它忽略 NULL 记录。如果我将 NULL 之一更改为 2 以外的某个非 NULL id,则返回该记录。“它”是指 MySQL。 (3认同)

Abd*_*fiz 16

对于where field not empty这个工作对我来说:

->where('table_name.field_name', '<>', '')
Run Code Online (Sandbox Code Playgroud)


Mla*_*vic 7

或者像这样:

Code::whereNotIn('to_be_used_by_user_id', [2])->get();
Run Code Online (Sandbox Code Playgroud)

  • 它不获取空数据 (2认同)

Yev*_*yev 6

虽然这似乎有效

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

您不应该将其用于大型表,因为作为常规规则,where子句中的“或”将停止使用索引的查询。您将从“键查找”变为“全表扫描”

在此处输入图片说明 在此处输入图片说明

而是尝试联盟

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

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