查询构建器使用' whereNotIn'抛出错误

时间:2015-12-09 15:10:16

标签: php mysql laravel laravel-5 query-builder

我试图获取包含一系列例外情况的记录,这是我尝试的内容(请参阅下文)

$users_nowishlist = DB::table('employee')
    ->join('users', 'users.employee_id', '=', 'employee.employee_id')
    ->where('has_wishlist', '=', "0")
    ->whereNotIn('employee_id', ['MMMFLB003', 'guest_01', 'guest_02', 'guest_03'])
    ->where('employment_status', '=', 'ACTIVE')
    ->get();

所以这一行是我的记录过滤器,意味着只有那些不等于任何记录的记录' employee_id'来自例外数组将返回(参见下文)

->whereNotIn('employee_id', ['MMMFLB003', 'guest_01', 'guest_02', 'guest_03'])

但我得到了这个错误(参见下文):

  

SQLSTATE [23000]:完整性约束违规:1052列   ' EMPLOYEE_ID' where子句是不明确的(SQL:select * from   employee上的users内部加入usersemployee_id =   employeeemployee_id其中has_wishlist = 0和employee_id   不在(MMMFLB003,guest_01,guest_02,guest_03)和   employment_status = ACTIVE)

任何想法,请帮忙吗?

2 个答案:

答案 0 :(得分:1)

这是因为当您进行连接时,有两列具有相同的名称。

这就是为什么在您加入时employee_id加上users.employee.

的前缀

现在在您的whereNotIn上,您还必须为它添加前缀,以便查询引擎知道您要引用的表列。因此,您只需在whereNotIn子句中添加前缀:

->whereNotIn('employee.employee_id', ['MMMFLB003', 'guest_01', 'guest_02', 'guest_03'])

答案 1 :(得分:1)

->whereNotIn('employee.employee_id', ['MMMFLB003', 'guest_01', 'guest_02']) 

使用连接时,如果您在两个字段中使用相同的名称,则会出现这些错误,因此请始终尝试按此方式获取它们

table_name.field_name