Php 将yii2中的相关属性传递给json输出
我正在将数据返回到RESTAPI,我想返回属性和相关属性Php 将yii2中的相关属性传递给json输出,php,json,yii2,Php,Json,Yii2,我正在将数据返回到RESTAPI,我想返回属性和相关属性 [1]=> object(common\models\User)#119 (10) { ["_attributes":"yii\db\BaseActiveRecord":private]=> array(18) { ["id"]=> int(27) ["username"]=> string(8) "marshal2" ["email"]=> string(18) "mars
[1]=>
object(common\models\User)#119 (10) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(18) {
["id"]=>
int(27)
["username"]=>
string(8) "marshal2"
["email"]=>
string(18) "marshal2@gmail.com"
}
["_related":"yii\db\BaseActiveRecord":private]=>
array(1) {
["role"]=>
object(common\rbac\models\Role)#131 (8) {
["_attributes":"yii\db\BaseActiveRecord":private]=>
array(3) {
["item_name"]=>
string(23) "Tracking center officer"
["user_id"]=>
int(27)
}
}
}
这就是我所拥有的
$query = User::find()->joinWith('role');
当我表演的时候
var_dump($query->all())
我得到一个表单数组(属性和相关属性)
}
通过将结果传递给json输出时
return ['data' => $query->all()];
仅传递属性,但不传递相关属性
这就是我得到的
"data": [
{
"username": "admin",
"email": "track.yard@gmail.com",
},
{
//also id
"username": "marshal1",
"email": "marshal1@gmail.com",
..... and others
//i expected to see a role name since there is a related attribute with user id
},
我需要添加什么才能同时传递相关属性
正如我所期望的那样,数据也会显示角色项名称
这是我的用户模型
public $role;
public function rules()
{
return [
[['username', 'email'], 'filter', 'filter' => 'trim'],
[['username','expires_on', 'email', 'status'], 'required'],
['email', 'email'],
// ['expires_on', 'integer'],
[['username','first_name','last_name','firebase_pwd','picture'], 'string', 'min' => 2, 'max' => 255],
// password field is required on 'create' scenario
['password', 'required', 'on' => 'create'],
// use passwordStrengthRule() method to determine password strength
$this->passwordStrengthRule(),
['username', 'unique', 'message' => 'This username has already been taken.'],
['email', 'unique', 'message' => 'This email address has already been taken.'],
];
}
public function fields()
{
$fields = parent::fields();
// remove fields that contain sensitive information
unset($fields['auth_key'], $fields['password_hash'],
$fields['password_reset_token'],
$fields['created_at'],
$fields['firebase_pwd'],
$fields['updated_at'],
$fields['id'],
$fields['authtoken'],
$fields['account_activation_token']
);
$fields['role'] =function ($model){ //added this to see if it'll work
return $model->role->name;
};
return $fields;
}
public function getRole()
{
// User has_one Role via Role.user_id -> id
return $this->hasOne(Role::className(), ['user_id' => 'id']);
}
enter code here
关系仍在用户模型中
public $role;
public function rules()
{
return [
[['username', 'email'], 'filter', 'filter' => 'trim'],
[['username','expires_on', 'email', 'status'], 'required'],
['email', 'email'],
// ['expires_on', 'integer'],
[['username','first_name','last_name','firebase_pwd','picture'], 'string', 'min' => 2, 'max' => 255],
// password field is required on 'create' scenario
['password', 'required', 'on' => 'create'],
// use passwordStrengthRule() method to determine password strength
$this->passwordStrengthRule(),
['username', 'unique', 'message' => 'This username has already been taken.'],
['email', 'unique', 'message' => 'This email address has already been taken.'],
];
}
public function fields()
{
$fields = parent::fields();
// remove fields that contain sensitive information
unset($fields['auth_key'], $fields['password_hash'],
$fields['password_reset_token'],
$fields['created_at'],
$fields['firebase_pwd'],
$fields['updated_at'],
$fields['id'],
$fields['authtoken'],
$fields['account_activation_token']
);
$fields['role'] =function ($model){ //added this to see if it'll work
return $model->role->name;
};
return $fields;
}
public function getRole()
{
// User has_one Role via Role.user_id -> id
return $this->hasOne(Role::className(), ['user_id' => 'id']);
}
enter code here
您可以将响应设置为JSON格式
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$items = $query->all();
return ['data' => $items];
或者用php编码
$my_json = json_encode($items);
echo $my_json;
您可以将响应设置为JSON格式
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$items = $query->all();
return ['data' => $items];
或者用php编码
$my_json = json_encode($items);
echo $my_json;
在联接上使用,并使用以数组形式返回数据:
$query = User::find()->with('role')->asArray();
或
在联接上使用,并使用以数组形式返回数据:
$query = User::find()->with('role')->asArray();
或
您只需使用asArray() 示例:
$users = User::find()->with('role')->asArray()->all();
您只需使用asArray() 示例:
$users = User::find()->with('role')->asArray()->all();
您可以将结果接收到数组中,并返回与@topher相同的结果。 或者你可以在今天结束
ArrayHelper::toArray(User::find()->with('role')->all()[
//或者您的名称空间模型
'common\models\User'=>ArrayHelper::merge(
User::attributes(),
['role'=>函数($model){
返回$model->role;
}]
)
])
使用此方法,您有机会设置返回结果
ArrayHelper::toArray(User::find()->all()[
//或者您的名称空间模型
“通用\模型\用户”=>[
“id”,
“用户名”
],
])
发生这种情况是因为响应准备使用rest,并且它只使用模型中的一层。您可以将结果接收到数组,并返回与@topher相同的结果。 或者你可以在今天结束
ArrayHelper::toArray(User::find()->with('role')->all()[
//或者您的名称空间模型
'common\models\User'=>ArrayHelper::merge(
User::attributes(),
['role'=>函数($model){
返回$model->role;
}]
)
])
使用此方法,您有机会设置返回结果
ArrayHelper::toArray(User::find()->all()[
//或者您的名称空间模型
“通用\模型\用户”=>[
“id”,
“用户名”
],
])
发生这种情况是因为响应准备使用rest,并且它只使用模型中的一个层。这些对您有用吗?不,角色仍然未显示。我已经用字段部分更新了问题,但仍然失败。是否为您完成了这些工作?否角色仍然未显示我已用字段部分更新了问题,但仍然失败无错误,但wron结果-相关部分中的属性未传递给jsonoutput@scaisEdge
\u相关的
是私有财产,所以你不能像那样访问它。#yupik我该如何访问它呢?没有错误,但是wron结果-与#u相关的部分中的属性没有被传递到jsonoutput@scaisEdge\u related
是私有财产,所以你不能那样访问它。#yupik那我怎么访问它呢