syamskoy
@syamskoy

Как в Yii сделать связь в виде полей, а не объекта?

Изучаю Yii2. Читаю о связях, вроде все понятно. Но возник вопрос как сделать следующую вещь:

Есть таблица users (id, phone, password, type), есть две связанные таблицы: profile_i (id_user, snils, passport) и profile_o (id_user, inn, kpp); Связываются таблицы в зависимости от типа в users: если тиип один, то одна, если тип другой, то другая. Но вот как ПРАВИЛЬНО реализовать что бы доступ к полям был не $user->profile->snils или $user->profile->inn, а как и к основной: $user->inn, $user->kpp, $user->snils и т.д.
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 2
Объявите в классе User соответствующие геттеры. В PHPDoc можно описать "виртуальные" свойства, чтобы IDE не предупреждала об использовании магии.
/**
...
 * @property string $inn
 * @property string $snils
 */
class User extends ActiveRecord 
{
...
    public function getInn()
    {
        return $this->profile->inn;
    }  
    
    public function getSnils ()
    {
        return $this->profile->snils ;
    }   
...
}
Ответ написан
Комментировать
sanchezzzhak
@sanchezzzhak
Ля ля ля...
что бы 101 запроса не было, нужно при подключение связи использовать
joinWith(['profile', 'profile.photos' ],true);
Тогда основной зарос будет с join а связи погрузятся через where IN ( ... )

Я не рекомендую реализовывать через гетеры, то что вы хотите сделать
вы ведь можете сделать так

$profile = $user->profile;
$profile->inn;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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