Я пишу так:
/**
* @return array|null|User
*/
public function getUser() {
return $this->hasOne(User::className(), ['id' => 'user_id'])->one();
}
А в примерах везде возвращают без ->one только запрос. Аналогично и с hasMany (только там ->all()). Как правильнее? Просто когда возвращаешь объект, а не запрос - можно за счет phpdoc подставить тайпхинты в IDE. Это очень удобно. Но с другой стороны порой приходится дублировать код когда в другом месте надо ту же связь, но с изменением запроса (например условие добавить). Правда редко.
Писать можно и так и так. В классе BaseActiveRecord переопределен __get, когда вы обращаетесь к $model->user обрабатывается такой кусок кода:
...
$value = parent::__get($name);
if ($value instanceof ActiveQueryInterface) {
return $this->_related[$name] = $value->findFor($name, $this);
} else {
return $value;
}
...
Из него видно что если вы в релейшене вернули запрос она его выполнит findFor, а если уже готовый результат, то просто вернет его. Определеяется это по наличию интерфейса.
Как писать с точки зрения веры вам решать.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости