Php Laravel复杂范围查询关系(供审查)
这是我写的,我只是想知道这是不是最好的方法。 订单有很多交易。。。属于订单的交易。我正在查询ID大于上次发送给履行的ID的订单。然后,我只想要具有已批准付款状态或离线付款类型的订单 这段代码有效,只是想知道这是否是最好的方法:Php Laravel复杂范围查询关系(供审查),php,laravel,eloquent,relationship,Php,Laravel,Eloquent,Relationship,这是我写的,我只是想知道这是不是最好的方法。 订单有很多交易。。。属于订单的交易。我正在查询ID大于上次发送给履行的ID的订单。然后,我只想要具有已批准付款状态或离线付款类型的订单 这段代码有效,只是想知道这是否是最好的方法: /** * Get all orders pending fulfilment * * @param $query * @param $last_fulfiled * @return \Illuminate\Database\Eloquent\Builder
/**
* Get all orders pending fulfilment
*
* @param $query
* @param $last_fulfiled
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeToFulfil($query, $last_fulfiled)
{
return $query->where('id', '>', $last_fulfiled)
->where(function($query) {
$query->whereHas('transactions', function ($query) {
$query->where('status', '>=', 5);
})->orWhere('payment_method', '=', 2);
});
}
编辑:
以下是SQL语法:
select * from `orders` where `orders`.`deleted_at` is null and `id` > ? and ((select count(*) from `transactions` where `transactions`.`order_id` = `orders`.`id` and `status` >= ?) >= 1 or `payment_method` = ?)
谢谢 这绝对是构建此查询的正确Laravel方法。这几乎总是生成一个经过适当优化的查询,通常是左连接或子查询,或者两者的组合
如果您想查看结果查询的优化程度,请将
->toSql()
添加到该查询语句的末尾,并在此处发布原始查询语法。感谢您的回答,我在回答中添加了SQL语法。。。让您意识到Laravel是多么有用:)我认为构建的查询非常完美。只要你确定要对筛选的列进行索引,那就太好了。是的,我做了。。。谢谢你的帮助。