Код: Выделить всё
public function getKindergartenGroup()
{
$q = KindergartenGroup::find()
->alias('KG')
->rightJoin(KindergartenGroupClientRelation::tableName() . ' as KGCR', 'KGCR.kindergarten_group_id = KG.id')
->rightJoin(self::tableName() . ' as DCR', 'DCR.user_id = KGCR.user_id and DCR.department_id = KG.kindergarten_id');
$q->multiple = true;
$q->link = [
'KGCR.user_id' => 'user_id',
'KG.kindergarten_id' => 'department_id'
];
return $q;
}
Код: Выделить всё
SELECT `KG`.* FROM `kindergarten_group` `KG` RIGHT JOIN `kindergarten_group_client_relation` `KGCR` ON KGCR.kindergarten_group_id = KG.id RIGHT JOIN `department_client_relation` `DCR` ON DCR.user_id = KGCR.user_id and DCR.department_id = KG.kindergarten_id WHERE (`KG`.`KGCR`.`user_id`, `KG`.`KG`.`kindergarten_id`) IN ((119, 4), (121, 1), (122, 1), (123, 1), (126, 1), (127, 1), (127, 5), (127, 5), (128, 1), (129, 1), (130, 1), (131, 1), (132, 1), (134, 2), (142, 5), (143, 1), (145, 1), (152, 2), (153, 2), (204, 1), (205, 9), (206, 9), (220, 7), (221, 7))
При создании запроса с связям (link) ('KGCR.user_id' => 'user_id', 'KG.kindergarten_id' => 'department_id') добавляется альянс `KG`.
Виновник vendor\yiisoft\yii2\db\ActiveRelationTrait.php
Код: Выделить всё
private function prefixKeyColumns($attributes)
{
if ($this instanceof ActiveQuery && (!empty($this->join) || !empty($this->joinWith))) {
if (empty($this->from)) {
/* @var $modelClass ActiveRecord */
$modelClass = $this->modelClass;
$alias = $modelClass::tableName();
} else {
foreach ($this->from as $alias => $table) {
if (!is_string($alias)) {
$alias = $table;
}
break;
}
}
if (isset($alias)) {
foreach ($attributes as $i => $attribute) {
$attributes[$i] = "$alias.$attribute";
}
}
}
return $attributes;
}