Laravel hasMany()+ where()以相反的顺序返回条件

时间:2016-06-14 23:02:55

标签: laravel laravel-5 laravel-5.2

使用以下内容:

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语句中列的顺序?

这是为了充分利用综合指数。

1 个答案:

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

我希望它有所帮助。