Доброй ночи... Сидя уже пятый час, не могу понять почему activerecord коверкает мой sql запрос.
В идеале необходимо перенести в activerecord этот запрос:
select
user.id,
user_field.name,
user_field_value.value
from `user`
join `user_field` on user.site_id=user_field.site_id
left join `user_field_value` on user_field.id=user_field_value.field_id
and user_field_value.user_id=user.id
where user.site_id=14 and user.id=139
Но у меня получилось вот так, да и не работает:
public function getFields()
{
return $this->hasMany(UserField::className(), ['id' => 'field_id'])
->viaTable(UserFieldValue::tableName(), ['user_id' => 'id']);
}
В итоге он соберет следующее:
SELECT
`user`.`id`,
`user_field`.`name`,
`user_field_value`.`value`
FROM `user`
LEFT JOIN `user_field_value` ON `user`.`id` = `user_field_value`.`user_id`
LEFT JOIN `user_field` ON `user_field_value`.`field_id` = `user_field`.`id`
WHERE `user`.`id`=139
Если это исполнить в консоли, таблица сформируется и отдаст значения кастомных полей у указанного юзера.
Но вот если например вызвать его таким образом:
$models = $siteModel->getUser()->all();
if( ! $models ) {
throw new NotFoundHttpException(Yii::t('users', 'Users is not found'));
}
$result = [];
foreach($models as $model) {
$s = $model->getFields();
var_dump($s->all(), $s->createCommand()->getRawSql());
break;
}
Выведет все кроме user_field_value.
Как быть? Уже мозг взрывается