Как получить строки DISTINCT для отношения в Yii2 Active record - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть модель AieDetail, как показано ниже:

  class AieDetail extends \yii\db\ActiveRecord
  {
      public function getDepts()
      {
          return $this->hasOne(Department::className(), ['DEPT_CODE' => 'DEPT_CODE']);
      }
  }

У меня есть этот запрос, который я хочу использовать для выбора отдельного столбца COL_ABBREV в таблице Department

  $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 - это запрос вместо массива данных. Какой правильный подход для получения строк?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020
  $aie_detail = AieDetail::find()
                        ->select([Department::tableName() . '.COL_ABBREV'])
                        ->joinWith('depts')
                        ->where([
                          '!=',
                          Department::tableName() . '.COL_ABBREV',
                         'CA'
                        ])
                        ->distinct()
                        ->asArray()
                        ->all();

, если вы получили какую-либо неопределенную ошибку индекса, включите внешние ключи, используемые в отношении оператора select, или используйте метод leftJoin () вместо joinWith ().

, если вы хотите выбрать больше данных и отличается от одного столбца, затем добавьте groupBy () с аргументами, имеющими различные столбцы

0 голосов
/ 28 апреля 2020
$aie_detail = AieDetail::find()->alias('AD')
    ->select('Department.COL_ABBREV')
    ->joinWith(['depts'])
    ->where(['not','Department.COL_ABBREV', 'CA'])
    ->distinct()
    ->all();

Вы должны передать фактическое имя таблицы при использовании '.' оператор при выборе столбца в запросе.

...