关于 Model 查询的一个延伸问题.

今天在做一个功能统计的时候.因为有多个where条件查询.用了以下查询方式.
首先

$where=[];

这里是判端 $request->get(‘参数’),然后添加到where参数中.

$sql =Orders::where($where);

然后因为其他复杂的逻辑,比如判断 存在即查询:

if ($request->get('customer_id')) {
        $sql->whereIn('customer_id', explode(',', $customer_id));
}
#最后
$sqlA = $sql;
$data = $sql->orderBy($order_field, 'desc')->paginate(20);
#求订单总数 :
$total = $data->total(); #订单总数
#成功单数.
$success_num = $sqlA->where(['is_success'=>1])->count();

这个$sqlA 却包含了 $sql->orderBy($order_field, ‘desc’)->paginate(20);的参数,导致统计数据不正确.
打印$sqlA 结构如图:

关于Model查询的一个延伸问题.

请教各位,这种是什么逻辑.或者是为什么不允许赋值给另一个变量.

最后我这边只能用以下方式解决当前问题.

$success_num = DB::table('orders')->where($where)where(['is_success' => 1])->count();

如有大神,请不吝赐教.跪谢.

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案

$sqlA = clone $sql;

5年前 评论
讨论数量: 5

同一个对象,同一个地址 :grin:

5年前 评论

可以使用 replicate () 克隆一个新模型。$sqlA = $sql->replicate()

5年前 评论
leo

$sqlA = clone $sql;

5年前 评论

@zxdstyle Call to undefined method Illuminate\Database\Eloquent\Builder::replicate()

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!