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'])
。