为什么 "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
希望这能解决您的问题!
我在我的 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
希望这能解决您的问题!