Как работают 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 возвращается?
  • Вопрос задан
  • 201 просмотр
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Если реляция вызывается как метод - возвращается ActiveQuery, если как свойство - возвращается результат выполнения ActiveQuery
В BaseObject есть метод __get()

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

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

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