Lak*_*aky 23 php mysql query-builder laravel laravel-4
我正在通过过滤器进行产品搜索:
我的代码:
->where(function($query) use($filter)
{
if(!empty($filter)){
foreach ($filter as $key => $value) {
$f = explode(",", $value);
$query-> whereIn('products.value', $f);
}
}
})
Run Code Online (Sandbox Code Playgroud)
查询:
and (products.value in (Bomann, PHILIPS) and products.value in (red,white))
Run Code Online (Sandbox Code Playgroud)
但是我需要:
and (products.value in (Bomann, PHILIPS) OR products.value in (red,white))
Run Code Online (Sandbox Code Playgroud)
Laravel有类似的东西:
orWhereIn
Run Code Online (Sandbox Code Playgroud)
Vit*_*Kos 40
你可能只是whereIn
在核心中搜索功能才能看到它.这个给你.这必须回答你的所有问题
/**
* Add a "where in" clause to the query.
*
* @param string $column
* @param mixed $values
* @param string $boolean
* @param bool $not
* @return \Illuminate\Database\Query\Builder|static
*/
public function whereIn($column, $values, $boolean = 'and', $not = false)
{
$type = $not ? 'NotIn' : 'In';
// If the value of the where in clause is actually a Closure, we will assume that
// the developer is using a full sub-select for this "in" statement, and will
// execute those Closures, then we can re-construct the entire sub-selects.
if ($values instanceof Closure)
{
return $this->whereInSub($column, $values, $boolean, $not);
}
$this->wheres[] = compact('type', 'column', 'values', 'boolean');
$this->bindings = array_merge($this->bindings, $values);
return $this;
}
Run Code Online (Sandbox Code Playgroud)
看它有第三个布尔参数.祝好运.
Nee*_*ule 18
你orWhereIn
在Laravel 有一个功能.它采用与whereIn
函数相同的参数.
它不在文档中,但您可以在laravel API中找到它. http://laravel.com/api/4.1/
这应该给你这个:
$query-> orWhereIn('products.value', $f);
Run Code Online (Sandbox Code Playgroud)
是的,orWhereIn
是一种您可以使用的方法。
我相当确定它应该给你你正在寻找的结果,但是,如果没有,你可以简单地使用implode
创建一个字符串然后分解它(这是对你的数组结构的猜测):
$values = implode(',', array_map(function($value)
{
return trim($value, ',');
}, $filters));
$query->whereIn('products.value', explode(',' $values));
Run Code Online (Sandbox Code Playgroud)
小智 6
$query = DB::table('dms_stakeholder_permissions');
$query->select(DB::raw('group_concat(dms_stakeholder_permissions.fid) as fid'),'dms_stakeholder_permissions.rights');
$query->where('dms_stakeholder_permissions.stakeholder_id','4');
$query->orWhere(function($subquery) use ($stakeholderId){
$subquery->where('dms_stakeholder_permissions.stakeholder_id',$stakeholderId);
$subquery->whereIn('dms_stakeholder_permissions.rights',array('1','2','3'));
});
$result = $query->get();
return $result;
Run Code Online (Sandbox Code Playgroud)
// OUTPUT @input $ stakeholderId = 1
//选择group_concat(dms_stakeholder_permissions.fid)为fid , dms_stakeholder_permissionss
. rights
从dms_stakeholder_permissions
哪里dms_stakeholder_permissions
.stakeholder_id
= 4或(dms_stakeholder_permissions
.stakeholder_id
= 1, dms_stakeholder_permissions
.rights
在(1,2,3))
小智 6
是的,orWhereIn
Laravel 中存在 where 子句方法。请参阅以下官方 Laravel 查询生成器文档链接以获取详细信息。
文档链接:https://laravel.com/docs/8.x/queries#additional-where-clauses
有两种方法可以获得以下输出。
and (products.value in (Bomann, PHILIPS) OR products.value in (red,white))
Run Code Online (Sandbox Code Playgroud)
orWhereIn
$query = Product::where('color', 'blue')
->whereIn('value', ['Bomann', 'PHILIPS'])
->orWhereIn('value', ['red', 'white'])
->get();
Run Code Online (Sandbox Code Playgroud)
输出:
select * from `products` where `color` = 'blue' and `value` in (Bomann, PHILIPS) OR `value` in (red,white))
Run Code Online (Sandbox Code Playgroud)
orWhere
和whereIn
$query2 = Product::where('color', 'blue')
->whereIn('value', ['Bomann', 'PHILIPS'])
->orWhere(function ($query) {
$query->whereIn('value', ['Bomann', 'PHILIPS']);
})
->get();
Run Code Online (Sandbox Code Playgroud)
输出:
select * from `products` where `color` = 'blue' and `value` in (Bomann, PHILIPS) OR (`value` in (red,white))
Run Code Online (Sandbox Code Playgroud)