项目中一次使用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参数。