如何更新用户个人资料?Laravel-5

7

首先声明,我不知道自己在干什么... 我有一个名为user_info的表格,长这个样子:

    Schema::create('user_info', function(Blueprint $table){
        $table->increments('id');
        $table->unsignedInteger('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
        $table->string('address');
        $table->string('city');
        $table->string('state');
        $table->string('zip');
        $table->text('description');
        $table->text('experience');
        $table->timestamps();
    });   

我正在尝试创建更新控制器,目前它看起来像这样。

public function update(Request $request)
{

  $user = $request->user();
  $data['description'] = $request->input('description');
  $data['experience']=$request->input('experience');

  $user->user_info -> $data->save();
}

再次...不知道我在做什么...

这是我的表格:

    <div class='col-md-10 well form-well'>
        {!! Form::open(['method' => 'PATCH', 'action'=> ['UserController@update', Request::user()->id]]) !!}
        <div class='row'>
                <div class='form-group'>
                    <div class='col-md-2'>
                        {!! Form::label('description', 'About You')!!}
                    </div>
                    <div class='col-md-7'>
                        {!! Form::textarea('description', null, ['class'=>'form-control', 'rows'=>'3'])!!}
                    </div>
                </div>
        </div>
        <div class='row'>
                <div class='form-group'>
                    <div class='col-md-2'>
                        {!! Form::label('experience', 'Experience and Skills')!!}
                    </div>
                    <div class='col-md-7'>
                        {!! Form::text('experience', null, ['class'=>'form-control'])!!}
                    </div>
                </div>
        </div>
        <div class='form-group'>            
            {!! Form::submit('Save Changes',['class'=> 'btn btn-md btn-success']) !!}
            {!! Form::close()!!}
    </div>

更新:我成功地按照以下方式进行了更新:
$user->user_info->description = $data['description'];
  $user->user_info->experience = $data['experience'];
  $user->user_info->save();

但是我能不能像这样做些什么:

但是,我可以以某种方式做到类似以下操作吗:

$user->user_info->$request::Input::all();
$user->user_info->save();

好的,$user->user_info -> $data->save(); 这是一行非常奇怪的代码... 页面是否报告了任何错误? - BlitZ
我收到一个错误异常:数组转换为字符串。通常应该如何编写? - jackjoesmith
我对Laravel没有经验,但这是纯PHP信息。我建议查阅手册以了解如何正确操作。另外,我建议尝试像$data->save()$user->user_info = $data->save();这样的方法。 - BlitZ
当我尝试使用Call to a member function save() on a non-object时出现了此错误。 - jackjoesmith
好的,根据你最新的更新,你可以尝试循环遍历$request->input(...),并将它们的值赋给$user->user_info,然后提交到$user->user_info->save(); - BlitZ
我建议你阅读这个问题。你所询问的功能被称为“批量赋值”。这里有一个通用方法,但是针对Laravel 4,不过我认为它也可能适用于Laravel 5。 - BlitZ
1个回答

2

试试这个:

public function update(Request $request, $id)
{
  $User = User::with('user_info')->find($id);
  if(!$User) {
    return response('User not found', 404);
  }

  $UserInfo = $User->user_info;
  if(!$UserInfo) {
    $UserInfo = new UserInfo();
    $UserInfo->user_id = $id;
    $UserInfo->save();
  }

  try {
    $values = Input::only($UserInfo->getFillable());
    $UserInfo->update($values);
  } catch(Exception $ex) {
    return response($ex->getMessage(), 400);
  }
}

在您的UserInfo模型中,还需要添加以下内容:
protected $fillable = array('description', 'experience');
public function getFillable() {
  return $this->fillable;
}

有没有一种方法可以进行批量赋值呢?类似这样:UserInfo ->request::input->all()->save()-> - jackjoesmith
另外,我的模型包括地址,但是那是从另一个表单提交的。我不想为此使用不同的控制器操作。 - jackjoesmith
我得到的用户信息不存在。 - jackjoesmith
你在 User 模型中定义了关系吗? - num8er
让我们在聊天中继续这个讨论 - num8er
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接