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

query builder using 'whereNotIn' throws error

我正在尝试获取包含异常数组的记录,这是我尝试过的方法(请参阅下文)

$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' 的记录将是 return(请参阅下文)

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

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

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'employee_id' in where clause is ambiguous (SQL: select * from employee inner join users on users.employee_id = employee.employee_id where has_wishlist = 0 and employee_id not in (MMMFLB003, guest_01, guest_02, guest_03) and employment_status = ACTIVE)

有什么想法,请帮忙?

发生这种情况是因为当您进行连接时,有两个同名的列。

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

现在,在您的 whereNotIn 上,您还必须为其添加前缀,以便查询引擎知道您正试图引用哪个 table 列。因此,您只需在 whereNotIn 子句中添加前缀:

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

使用 join 时,如果您在连接的表中有两个同名的字段,则这些错误是预料之中的,因此请始终尝试像这样获取它们

table_name.field_name