雄辩 - 不等于

Posted

技术标签:

【中文标题】雄辩 - 不等于【英文标题】:Eloquent - where not equal to 【发布时间】:2015-03-31 04:06:06 【问题描述】:

我目前使用的是最新的 Laravel 版本。

我尝试了以下查询:

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

理想情况下,它应该返回除user_id = 2 之外的所有记录,但它返回空白数组。我该如何解决这个问题?

Code::all()

这将返回所有 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');
    


【问题讨论】:

【参考方案1】:

where!= 运算符与whereNull 结合使用

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

【讨论】:

它忽略了 NULL 记录。如果我将其中一个 NULL 更改为 2 以外的某个非 NULL id,则返回该记录。我所说的“它”是指 mysql 小心,这是个陷阱。【参考方案2】:

对于where field not empty,这对我有用:

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

【讨论】:

【参考方案3】:

虽然这似乎有效

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

您不应该将它用于大表,因为作为一般规则,您的 where 子句中的“或”是停止查询以使用索引。您正在从“键查找”到“全表扫描”

试试Union

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

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

【讨论】:

【参考方案4】:

或者像这样:

Code::whereNotIn('to_be_used_by_user_id', [2])->get();

【讨论】:

它不获取空数据【参考方案5】:

在条件非常棘手的情况下获取具有 null 和 value 的数据。即使您使用直接的 Where 和 OrWhereNotNull 条件,那么对于每一行,您都将获取这两个项目,而忽略其他 where 条件(如果应用)。例如,如果您有更多 where 条件,它将屏蔽这些条件并仍然返回 null 或 value 项,因为您使用了 orWhere 条件

到目前为止我发现的最好方法如下。这适用于 where (whereIn 或 WhereNotNull)

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

【讨论】:

你必须使用 whereDate 来处理日期

以上是关于雄辩 - 不等于的主要内容,如果未能解决你的问题,请参考以下文章

请问:等于,不等于,大于,小于,大于等于,小于等于的英文English是啥?

JAVA 的不等于语句怎么写

php 等于不等于 一个感叹号两个等于号

mysql不等于符号怎么写

oracle不等于号怎么表示

数据库中不等于条件怎么写