Php 如何在Yii2活动记录中获取关系上的不同行

Php 如何在Yii2活动记录中获取关系上的不同行,php,yii2,yii2-active-records,Php,Yii2,Yii2 Active Records,我有一个aiedeail模型,如下所示: class AieDetail extends \yii\db\ActiveRecord { public function getDepts() { return $this->hasOne(Department::className(), ['DEPT_CODE' => 'DEPT_CODE']); } } 我有一个查询,我想用它来选择Department表上不同的CO

我有一个aiedeail模型,如下所示:

  class AieDetail extends \yii\db\ActiveRecord
  {
      public function getDepts()
      {
          return $this->hasOne(Department::className(), ['DEPT_CODE' => 'DEPT_CODE']);
      }
  }
我有一个查询,我想用它来选择Department表上不同的COL_ABBREV列

  $aie_detail = AieDetail::find()->alias('AD')
                        ->select(['DEPT.COL_ABBREV'])
                        ->joinWith(['depts DEPT'])
                        ->where(['not',['DEPT.COL_ABBREV' => ['CA']]])
                        ->distinct()
                        ->all();
    return $aie_detail;
$aie_detail的值是一个查询,而不是一个数据数组。获取行的正确方法是什么

$aie_detail = AieDetail::find()->alias('AD')
    ->select('Department.COL_ABBREV')
    ->joinWith(['depts'])
    ->where(['not','Department.COL_ABBREV', 'CA'])
    ->distinct()
    ->all();
在查询中选择列时使用“.”运算符时,必须传入实际的表名

  $aie_detail = AieDetail::find()
                        ->select([Department::tableName() . '.COL_ABBREV'])
                        ->joinWith('depts')
                        ->where([
                          '!=',
                          Department::tableName() . '.COL_ABBREV',
                         'CA'
                        ])
                        ->distinct()
                        ->asArray()
                        ->all();
如果出现任何未定义的索引错误,请包含select语句关系中使用的外键,或者使用leftJoin()方法而不是joinWith()


如果要选择更多数据并基于单个列进行区分,请添加groupBy(),其中的参数具有不同的列

查询
$aie_detail
是什么意思?
\yii\db\ActiveQuery
all()
方法无法返回查询。它将始终是一个数组。它可能是空数组、模型数组或数据数组,具体取决于您在查询中是否使用
asArray()
。如果它是一个查询,那么您可能没有调用
all()
方法,或者您重写了
aiedeail::find()
,以返回
\yii\db\ActiveQuery
以外的内容。这不是真的。他正确地使用了别名。参见文档中的
joinWith
示例