关于 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();

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
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年前 评论

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