YIi2获取未包含在另一个表中的记录

时间:2017-07-05 03:36:22

标签: php mysql yii2

我想在一个未包含在另一个

中的表中检索记录

我有两张桌子

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

我哪里错了?

3 个答案:

答案 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();
   }