Задать вопрос

Как работают relation property в YII2?

Как работает доступ к свойству через Relations?
Например, есть relations в модели Order. И она возвращает ActiveQuery.
public function getCustomer()
    {
        return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
    }

Как срабатывает обработка $order->customer и почему возвращается ActiveRecord?
В BaseObject есть метод __get()
public function __get($name)
    {
        $getter = 'get' . $name;
        if (method_exists($this, $getter)) {
            return $this->$getter();
        } elseif (method_exists($this, 'set' . $name)) {
            throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
        }

        throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
    }

Но судя по этому "return $this->$getter();" он тоже должен вернуть ActiveQuery. Почему ActiveRecord возвращается?
  • Вопрос задан
  • 208 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Если реляция вызывается как метод - возвращается ActiveQuery, если как свойство - возвращается результат выполнения ActiveQuery
В BaseObject есть метод __get()

А BaseObject тут причем? ActiveRecord содержит приличную цепочку наследования, Вы лучшее ее изучите, например вот
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
смотрите не "__get", а методы "hasOne" и "hasMany". Именно они содержат то что Вы ищите. Ведь Вы именно их результат выполнения возвращаете.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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