Yii2 как сделать связь один к одному?

Здравствуйте.
Подскажите как правильно реализовать связь один к одному.
Есть таблица профилей, есть таблица пользователей.
В контролере профиля пытаюсь получить полный объект пользователя с полями из User и Profile.
$profile = Profile::find()->select('*')->joinWith('user',true,'RIGHT JOIN')->where(['username'=>$login])->one();

Если в смотреть в дебагере то запрос получается более-менее правильный. Но вот в объекте $profile есть поля только пользователя. И мне кажется что этот подход не совсем правильный.. Подскажите пожалуйста как правильно такое сделать
  • Вопрос задан
  • 1588 просмотров
Решения вопроса 1
MegaMufa
@MegaMufa
В таблице пользователя прописываете связь:
public function getProfile() {
  return $this->hasOne(Profile::class,['id'=>'id']);
}


И профиль становится доступным через свойство.
$user = User::find()->andWhere(['username'=>$login])->one();
$user->name; // своятво пользователя
$user->profile->id // свойство профиля


Если хотите одним запросом, то при выборке укажите модель, которую тянуть
$user = User::find()->with('profile')->andWhere(['username'=>$login])->one();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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