传递给Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: update()的参数1必须是类型数组,给定对象

时间:2017-05-20 14:16:43

标签: php laravel model-view-controller

我想更新数据库中的数据 我有控制器

public function update(Identity $identity, Request $request)
{
  $data = new Identity();
  $data->date  = $request['date'];
  $data->code   = $request['code'];
  $data->name   = $request['name'];
  $request->user()->identity()->update($data);
  Session::flash('flash_message', 'Update success.');
  return redirect('identity.index');
}

模型身份

public function user()
{
// Each data is owned by only one user
return $this->belongsTo('App\User');
}

模型用户

public function identity()
{
// Each user will have a lot of data
return $this->hasMany('App\Identity');
}

我发现了一个错误:传递给Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: update()的参数1必须是类型数组,给定对象。

2 个答案:

答案 0 :(得分:1)

您已经拥有路径模型绑定的Identity模型。您可以执行以下操作之一。

public function update(Identity $identity, Request $request)
{
    $identity->date = $request['date'];
    $identity->code = $request['code'];
    $identity->name = $request['name'];
    $identity->save();

    Session::flash('flash_message', 'Update success.');
    return redirect('identity.index');
}

或(确保在模型中设置$ fillable属性以使其工作)

public function update(Identity $identity, Request $request)
{
    $identity->update([
        'date' => $request['date'],
        'code' => $request['code'],
        'name' => $request['name'],
    ]);

    Session::flash('flash_message', 'Update success.');
    return redirect('identity.index');
}

答案 1 :(得分:0)

这一行

$data = new Identity();

创建一个对象。在下面你要设置它的属性。相反,看起来您可以将属性直接传递给函数:

public function update(Identity $identity, Request $request)
{
  $request->user()->identity()->update(array($request));
  ...
}

当然,您可能还希望将您的请求限制为所需的内容:

public function update(Identity $identity, Request $request)
{
  $params = array_intersect_key(array($request), array_flip(['date', 'code', 'name']))
  $request->user()->identity()->update($params);
  ...
}