ppokrovsky
@ppokrovsky

Есть ли способ в Yii2 задать связанную модель без hasOne/hasMany?

Добрый день.

Подскажите пожалуйста, есть-ли в Yii2 способ задать связанную модель не через явный метод (getCar), а через свойство класса. Что-то в духе:

class Driver extends ActiveRecord
{
    public $car;

    public function init() 
    {
          $this->car = Car::findOne($this->carId);
          parent::init();
     }
}


Цель - собрать объявление связей в одном методе модели.

Пример выше не задает свойство car, так как на момент выполнения метода init() свойство carId еще не заполнено данными из базы.

Спасибо.
  • Вопрос задан
  • 463 просмотра
Решения вопроса 1
Странная у вас цель.
Зачем собирать все в 1-ом методе? Ну если надо, можно и собрать (см. выше), но вот как будет работать ваш код после этой сборки... Тем более, у вас много связей, раз вы хотите ИХ собрать в одном месте..
Какие недостатки вашей хотелки:
1. Вы не сможете загрузить 1-им запросом и драйвера и авто, т.е. кол-во запросов к БД увеличивается в 2 раза;
2. Вы не сможете использовать связь в запросах (ее у вас просто не будет), а значит в чуть более сложных запросах все придется джойнить самостоятельно.
3. Да кучу минусов можно придумать...

Если хотите собрать все объявления связей в одном месте, ну соберите их (сами методы определяющие связи) в одном месте в коде модели и сразу будет наглядно видно, с чем конкретная модель связана. Я вообще советую выработать для себя "шаблон" построения модели, чтоб порядок порядок методов был в разных моделях 1-ин, например...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
QuickStudio
@QuickStudio
одного не понимаю - почему не сделать через связь и использовать eagerLoad?

Если уже хочется таких извращений - используйте event - self::AFTER_FIND
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы