Это отдельные отношения, вы не можете объявить это по-другому (по крайней мере, не взломав ActiveRecord
логика отношений).Если это отношения типа «близнец» и вы не хотите повторять одно и то же дважды, вы можете написать вспомогательные методы, которые будут выполнять одну и ту же операцию для обоих отношений.
Например, пользовательский ActiveQuery
для Post
модель:
class PostQuery extends ActiveQuery {
public function withUsers(?Closure $callback = null) {
if ($callback === null) {
return $this->with(['fromUser', 'toUser']);
}
return $this->with([
'fromUser' => $callback,
'toUser' => $callback,
]);
}
}
class Post extends ActiveRecord {
// ...
/**
* @return PostQuery
*/
public static function find() {
return Yii::createObject(PostQuery::class, [static::class]);
}
}
И затем используйте метод withUsers()
для применения условий к обоим отношениям:
$var = Post::find()
->select([
// ...
])
->withUsers(function (yii\db\ActiveQuery $query) {
$query->select(['id', 'concat(...) AS name']);
})
->asArray()
->all();
Или:
$var = Post::find()->withUsers()->all();