我想在一个未包含在另一个
中的表中检索记录我有两张桌子
tb_users having columns
id(primary key)
username,
firstname,
2. tbl_paychecks
id(primary key)
user_id(foreignkey)
amount
created_at
...
不,我想检索没有薪水的所有用户,所有tbl_users的id都不在tbl_paychecks
所以在我的用户模型中
public function getNOPaychecks()
{
return self::find()
->leftJoin('tbl_paychecks','`tbl_paychecks`.`user_id` != `tbl_user`.`id`')
->where(['tbl_paycheks.user_id'=>null])
->all();
}
但是上面仍然会返回错误
unknown column tbl_paycheks.user_id in 'where clause
我哪里错了?
答案 0 :(得分:1)
您的表名称为tbl _ paycheks
而不是tbl_paychecks
,而您可以使用的是
public function getNOPaychecks()
{
return self::find()
->leftJoin('tbl_paychecks','`tbl_paychecks`.`user_id` != `tbl_user`.`id`')
->where(['is', 'tbl_paychecks.user_id', null])
->all();
}
答案 1 :(得分:0)
不确定为什么你的代码不起作用。尝试将它作为两个查询。
public function getNOPaychecks()
{
$paycheckUsers = ArrayHelper::getColumn(PayCheckModelClassName::find()->select(['user_id'])->asArray()->all(),'user_id');
return self::find()
->where(['NOT IN','id',$paycheckUsers])
->all();
}
答案 2 :(得分:0)
您可以在查询中使用“存在”或“不存在”运算符 试试这个:
public function getNOPaychecks()
{
$subQuery = (new Query())->select('*')->from('tbl_paycheks' . ' t2')->where(
't2.user_id=t2.user_id'
);
return self::find()
->alias('t1')
->where(['not exists',$subQuery])
->all();
}