为什么 "where AND" 使用 EloquentFilter 不起作用?

Why doesn't "where AND" work using EloquentFilter?

我在我的 laravel 项目中使用 EloquentFilter。

我有一个 table 有列 First_name, Mid_name, Las_name, 类型, 状态.

以下是示例值:

这些是我的过滤器:

public function name($name){
    return $this->orWhere('first_name', 'LIKE', "%$name%")
        ->orWhere('mid_name', 'LIKE', "%$name%")
        ->orWhere('las_name', 'LIKE', "%$name%");
}

public function isAvailable(){
    return $this->where('status', 1);
}

public function thisType(){
    return $this->where('type', 2);
}

public function setup(){
    $this->thisType();
    $this->isAvailable();
}

这是 模型:

<?php

namespace App;

use App\ModelFilters\AdminFilters\UserFilter;
use EloquentFilter\Filterable;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    use Filterable;

    protected $table = 'users';
    protected $fillable = [
        'id',
        'first_name',
        'mid_name',
        'las_name',
        'type',
        'status'
    ];

    # Other

    public function modelFilter()
    {
        return $this->provideFilter(UserFilter::class);
    }
}

因此,如果我使用 User:filter(Input::all())->get();,将自动 return 编辑 2 个结果,因为 类型列 的固定值 (2)。

但我的问题是,当我搜索 "a" 时,有 5 个结果被 return 编辑。为什么 return 5 个结果在 类型列 中并非都具有 2 个值?

我怀疑它在 return 有 5 个结果时起到了 ->orWhere 的作用。谁能帮我解决这个问题?

我发现您正在使用这个包: https://github.com/Tucker-Eric/EloquentFilter

所以您使用 setup() 方法所做的是正确的。 但是 orWhere() 使得类型必须是 2 或者任何名称必须包含一个 a 并且由于所有名称都匹配它所以每次都会 return 6 条记录.

修复非常简单,您只需将 orWhere() 查询包装在 where():

public function name($name){
    return $this->where(function ($query) use ($name) {
        return $query->orWhere('first_name', 'LIKE', "%$name%")
        ->orWhere('mid_name', 'LIKE', "%$name%")
        ->orWhere('las_name', 'LIKE', "%$name%");
    });
}

这将表明您希望类型为 2 且其中任一名称包含 a

希望这能解决您的问题!