Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel复杂范围查询关系(供审查)_Php_Laravel_Eloquent_Relationship - Fatal编程技术网

Php Laravel复杂范围查询关系(供审查)

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

这是我写的,我只是想知道这是不是最好的方法。 订单有很多交易。。。属于订单的交易。我正在查询ID大于上次发送给履行的ID的订单。然后,我只想要具有已批准付款状态或离线付款类型的订单

这段代码有效,只是想知道这是否是最好的方法:

/**
 * 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是多么有用:)我认为构建的查询非常完美。只要你确定要对筛选的列进行索引,那就太好了。是的,我做了。。。谢谢你的帮助。