json中未返回Yii2模型关系



Am使用javascript将数据提取到yii2 api,我希望它也能返回模型关系。我有以下

在我的用户类中,我有

class User{
//relationship
public function getAuthOptions(){
return $this->hasMany(UserAuthOption::className(),["user_id"=>"id"]);
}
}

我按照以下获取数据

$users = User::find()->with(['authOptions'])->all();
return $users.

上面返回一个不包含authOptions的对象数组。

我知道你可以通过访问关系数据

$users[0]->authOptions

但是,对于无法访问$users[0]->authOptions的javascript api请求,有没有一种方法可以在$users查询中返回关系数据

目前,我可以通过添加像这样的自定义字段来实现这一点

class User{

public function fields()
{
$fields = parent::fields();
$fields["authOptions"]=function ($model){
return $model->authOptions;
};
return $fields;
}
public function getAuthOptions(){
return $this->hasMany(UserAuthOption::className(),["user_id"=>"id"]);
}
}

但上面的不是最佳的,因为它在所有请求中都返回authOptions,但我想控制哪些请求需要返回authOptions。

class User extends ActiveRecord
{
public function extraFields()
{
return [
'authOptions',
];
}
public function getAuthOptions() {
return $this->hasMany(UserAuthOption::class, ['user_id' => 'id']);
}
}

之后,当您在API查询中需要时,您可以使用expand参数,如下所示:

/api/controller/action?expand=authOptions

在REST控制器中不需要->with(['authOptions'])

最新更新