Php Yii2 rest api更新引发对象转换错误

Php Yii2 rest api更新引发对象转换错误,php,yii2,yii2-advanced-app,yii2-basic-app,yii-rest,Php,Yii2,Yii2 Advanced App,Yii2 Basic App,Yii Rest,我正在使用yii2restapi并使用授权:承载人进行身份验证 我有一个模型事件,只有两个操作创建和更新,但我的更新操作工作不正常,并抛出对象类转换错误 我使用以下代码查找具有混合条件的事件模型 public function actionUpdate($id) { $params=$_REQUEST; /*Following line throws error */ $model = Event::find()->where(['event_id'=>$id

我正在使用
yii2restapi
并使用
授权:承载人
进行身份验证

我有一个模型
事件
,只有两个操作
创建
更新
,但我的
更新
操作工作不正常,并抛出对象类转换错误

我使用以下代码查找具有混合条件的
事件
模型

public function actionUpdate($id)
{
    $params=$_REQUEST;
    /*Following line throws error */
    $model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity]);

    if($model !== null){

        $model->attributes=$params;
        $model->partner_id = Yii::$app->user->id;
        $model->updated_date = time();

        if ($model->save()) {

            $this->setHeader(200);
            echo json_encode(array('status'=>1,'data'=>array_filter($model->attributes)),JSON_PRETTY_PRINT);

        }

    }

}
错误是这样的

类api\modules\v1\models\User的对象无法转换为字符串


我不明白为什么它说我创建了
用户
类的对象。

问题在于您的
和where()
,您正试图分配
合作伙伴id
一个
对象
<代码>Yii::$app->user->identity
,这就是你的代码被破坏的地方。如果可以使用Yii的响应格式
response::format\u json
,则不要使用
json\u encode
,因此您的代码如下所示:

public function actionUpdate($id)
{
    \Yii::$app->response->format = yii\web\Response::FORMAT_JSON; // formatting response in json format
    $params= json_decode(\Yii::$app->request->rawBody, 1);
    /*Following line throws error */
    $model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);

    if($model !== null){

        $model->attributes=$params;
        $model->partner_id = Yii::$app->user->id;
        $model->updated_date = time();

        if ($model->save()) {

            $this->setHeader(200);
            return array('status'=>1,'data'=> $model); // you can simply use $model

        }

    }

}

问题在于您的
和where()
,您正试图分配
合作伙伴id
一个
对象
viz<代码>Yii::$app->user->identity
,这就是你的代码被破坏的地方。如果可以使用Yii的响应格式
response::format\u json
,则不要使用
json\u encode
,因此您的代码如下所示:

public function actionUpdate($id)
{
    \Yii::$app->response->format = yii\web\Response::FORMAT_JSON; // formatting response in json format
    $params= json_decode(\Yii::$app->request->rawBody, 1);
    /*Following line throws error */
    $model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);

    if($model !== null){

        $model->attributes=$params;
        $model->partner_id = Yii::$app->user->id;
        $model->updated_date = time();

        if ($model->save()) {

            $this->setHeader(200);
            return array('status'=>1,'data'=> $model); // you can simply use $model

        }

    }

}
您应该使用什么对象

Yii::$app->user->identity->id
最后一行是:

$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
您应该使用什么对象

Yii::$app->user->identity->id
最后一行是:

$model = Event::find()->where(['event_id'=>$id])->andWhere(['partner_id'=> Yii::$app->user->identity->id]);
问题在于:

andWhere(['partner\u id'=>Yii::$app->user->identity])

您正在尝试将用户对象(
Yii::$app->user->identity
)转换为字符串。相反,您需要使用用户的id(
Yii::$app->user->identity->id
),这是一个字符串。

问题在于:

andWhere(['partner\u id'=>Yii::$app->user->identity])


您正在尝试将用户对象(
Yii::$app->user->identity
)转换为字符串。相反,您需要使用用户id(
Yii::$app->user->identity->id
),这是一个字符串。

谢谢您的时间,但这不是我目前的问题。我认为问题在于您的
和where()
条件。您已经使用了
Yii::$app->user->identity
,其中
identity
是一个完整的对象,其中包含有关登录用户的数据。所以它应该像
Yii::$app->user->identity->anyAttributeFromUserTable
我想这就是问题所在,但是对于更新操作,我对
PUT
PATCH
请求有问题。我似乎没有收到任何通过
PUT
请求发送的数据。您不应该使用
$\u request
,因为
$\u request
只返回
get
POST
COOKIE
数据。因为您使用的是
PUT
PATCH
请求,我假设您使用的是
JSON
作为请求主体,所以您应该使用“\Yii::$app->request->rawBody”。谢谢您的时间,但这不是我目前的问题。我认为问题在于您的
和where()
条件。您已经使用了
Yii::$app->user->identity
,其中
identity
是一个完整的对象,其中包含有关登录用户的数据。所以它应该像
Yii::$app->user->identity->anyAttributeFromUserTable
我想这就是问题所在,但是对于更新操作,我对
PUT
PATCH
请求有问题。我似乎没有收到任何通过
PUT
请求发送的数据。您不应该使用
$\u request
,因为
$\u request
只返回
get
POST
COOKIE
数据。因为您使用的是
PUT
PATCH
请求,我假设您使用的是
JSON
作为请求主体,所以您应该使用“\Yii::$app->request->rawBody”。