使用以下内容:
return $this->hasMany(Text::class, 'item_id')->where('item_type', 'product');
将进行如下查询:
select * from `texts` where `item_type` = 'product' and `texts`.`item_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10')
我想要的是:
select * from `texts` where `texts`.`item_id` in ('1', '2', '3', '4', '5', '6', '7', '8', '9', '10') and `item_type` = 'product'
那么,在使用hasMany()+ multiple where()s时,如何更改where语句中列的顺序?
这是为了充分利用综合指数。
答案 0 :(得分:2)
由于Illuminate\Database\Query\Builder具有名为 wheres
的数组类型的公共属性,因此您可以将其反转。
$hasMany = $this->hasMany(Text::class, 'item_id')->where('item_type', 'product');
$eloquentBuilder = $hasMany->getQuery();
$queryBuilder = $eloquentBuilder->getQuery();
$queryBuilder->wheres = array_reverse($queryBuilder->wheres);
return $hasMany;
这会有效,但我建议你至少尝试原始的。
请参阅:
Illuminate\Database\Query\Builder::whereRaw()
Illuminate\Database\Query\Builder::orWhereRaw()
我希望它有所帮助。