5.0.0 - 严重 - 已处理
thinkphp版本:5.1.21使用关联模型查询时,当关联的两个表中字段重复时,将会触发一处BUG
错误信息如下:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous原因是两个表中存在同名字段`status`php代码如下:
$limit = $request->param('limit', 20);
$recharge = Recharge::hasWhere('user', function ($query) use ($request) {
$username = $request->param('username', '', 'trim');
$mobile = $request->param('mobile', '', 'trim');
$username != '' && $query->where('username', $username);
$mobile !='' && $query->where('mobile', $mobile);
})->where(function ($query) use ($request) {
$currency = $request->param('currency', -1, 'intval');
$status = $request->param('status', -1, 'intval');
$startDateTime = $request->param('startDateTime', null, 'strtotime');
$endDateTime = $request->param('endDateTime', null, 'strtotime');
$currency != -1 && $query->where('currency_id', $currency);
$status != -1 && $query->where('status', $status);
$startDateTime != null && $query->where('create_time', '>=', $startDateTime);
$endDateTime != null && $query->where('create_time', '<=', $endDateTime);
})->paginate($limit);查看错误的SQL语句:SELECT COUNT(*) AS tp_count
FROM
`bc_recharge` `Recharge`
INNER JOIN
`bc_users` `Users` ON `Recharge`.`user_id`=`Users`.`id`
WHERE ( `status` = :where_AND_status ) LIMIT 1 临时在代码中where中将status改为Recharge.status可暂时解决此问题:$limit = $request->param('limit', 20);
$recharge = Recharge::hasWhere('user', function ($query) use ($request) {
$username = $request->param('username', '', 'trim');
$mobile = $request->param('mobile', '', 'trim');
$username != '' && $query->where('username', $username);
$mobile !='' && $query->where('mobile', $mobile);
})->where(function ($query) use ($request) {
$currency = $request->param('currency', -1, 'intval');
$status = $request->param('status', -1, 'intval');
$startDateTime = $request->param('startDateTime', null, 'strtotime');
$endDateTime = $request->param('endDateTime', null, 'strtotime');
$currency != -1 && $query->where('currency_id', $currency);
$status != -1 && $query->where('Recharge.status', $status);
$startDateTime != null && $query->where('create_time', '>=', $startDateTime);
$endDateTime != null && $query->where('create_time', '<=', $endDateTime);
})->paginate($limit); 