1. In Yii2, when using a relational query, the following error occurs: yii\base\ErrorException: Undefined index: id in \vendor\yiisoft\yii2\db\ActiveRelationTrait.php:554. See Figure 1.

PHP
$query = ConventionFreeRegistration::find()
->select(ConventionFreeRegistration::tableName() . '.audit_state, COUNT(' . ConventionFreeRegistration::tableName() . '.`id`) AS `count`')
->where([
ConventionFreeRegistration::tableName() . '.convention_id' => $conventionId,
])
->groupBy(ConventionFreeRegistration::tableName() . '.audit_state')
->indexBy(ConventionFreeRegistration::tableName() . '.audit_state');
$count = $query
->joinWith(['distributor'])
->andWhere([ConventionDistributor::tableName() . '.user_id' => Yii::$app->user->id])
->asArray()
->all();
// 在模型 ConventionFreeRegistration 定义关联
public function getDistributor() {
return $this->hasOne(ConventionDistributor::class, ['convention_id' => 'convention_id', 'id' => 'distributor_id'])
->viaTable(ConventionRegistrationDistributorMapping::tableName(), ['registration_id' => 'id', 'convention_id' => 'convention_id']);
}
2. Confirmed that the generated SQL executes without errors. See Figure 2.

3. Adjusted the code implementation by removing ->asArray(), and the error no longer occurs. However, doing this makes it impossible to retrieve the count value. Adopted a more reliable alternative approach using leftJoin, which also resolves the error. See Figure 3.

PHP
$query = ConventionFreeRegistration::find()
->select('t.audit_state, COUNT(t.`id`) AS `count`')
->from(ConventionFreeRegistration::tableName() . ' t')
->where([
't.convention_id' => $conventionId,
])
->groupBy('t.audit_state')
->indexBy('t.audit_state');
$count = $query
->leftJoin(
ConventionRegistrationDistributorMapping::tableName() . ' m',
't.id = m.registration_id AND t.convention_id = m.convention_id'
)
->leftJoin(
ConventionDistributor::tableName() . ' d',
'm.convention_id = d.convention_id AND m.distributor_id = d.id'
)
->andWhere(['d.user_id' => Yii::$app->user->id])
->asArray()
->all();
