项目中一次使用bind时,遇到bind参数丢失的情况,这种记录一下。
$params = array_merge($this->default_params, $params); $prefix = DB::getTablePrefix(); $sql = DB::table('order')->whereRaw("periods_id = {$prefix}periods.id and user_id = {$prefix}periods.user_id")->select([DB::raw('SUM(pg_order.num)')])->toSql(); $sql2 = DB::table('order')->selectRaw("SUM(num) as num,periods_id,max(create_at)as create_at,MAX(user_id)as user_id")->where('order.user_id', '=', $this->user->id)->groupBy('periods_id') ->orderBy("create_at", 'desc')->forPage($params['page'], $params['page_size']) ->toSql(); $order = DB::table(DB::raw("({$sql2}) as pg_f"))->addBinding($this->user->id) //添加bind参数 ->leftJoin('periods', 'f.periods_id', '=', 'periods.id') ->leftJoin('goods', 'periods.goods_id', '=', 'goods.id') ->leftJoin('user', 'periods.user_id', '=', 'user.id') // ->whereIn('periods.status', $params['status_list']) ->select([ 'f.num', 'f.periods_id', 'user.nickname', 'periods.create_at', 'periods.lucky_code', 'periods.goods_id', 'periods.user_id', 'periods.periods', 'periods.buy', 'periods.total', 'periods.lottery_at', 'periods.lottery_show_at', 'periods.status', 'goods.title', 'goods.icon', DB::raw("({$sql}) as num2")]) // $d = DB::table('order')->getBindings(); //查看bind参数 ->get(); $sql2中bind 的 $this->user->id参数在获取$order时获取不到。即getBindings时返回为空。 addBinding添加一个新的bind参数。
