MacFiss
@MacFiss
человек

Как перевести SQL запрос в ActiveRecord?

Доброй ночи... Сидя уже пятый час, не могу понять почему 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.
Как быть? Уже мозг взрывается
  • Вопрос задан
  • 248 просмотров
Пригласить эксперта
Ответы на вопрос 1
slo_nik
@slo_nik Куратор тега Yii
Доброй ночи.
Может указать запрос со связью?
$models = $siteModel->getUser()->with('fields')->all();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы