Php 如何在Yii2活动记录中获取关系上的不同行
我有一个aiedeail模型,如下所示: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
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
示例