【问题标题】:How do I update user profile? Laravel-5如何更新用户资料? Laravel-5
【发布时间】:2015-12-23 23:52:42
【问题描述】:

首先想说我不知道​​我在做什么... 我有一个看起来像这样的 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-&gt;user_info -&gt; $data-&gt;save(); 是一个非常奇怪的行...页面是否报告任何错误?
  • 我得到一个错误异常:数组到字符串的转换。一般怎么写?
  • 我没有 Laravel 的经验,但是,它是纯 PHP 消息。我建议查看手册应该如何正确完成。另外我建议尝试$data-&gt;save()$user-&gt;user_info = $data-&gt;save();
  • 当我尝试Call to a member function save() on a non-object时收到此错误@
  • 好吧,在您的最新更新中,您可以尝试循环访问$request-&gt;input(...) 并将它们的值分配给$user-&gt;user_info,然后将其提交给$user-&gt;user_info-&gt;save();

标签: php laravel web laravel-5 laravel-facade


【解决方案1】:

试试这个:

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 -&gt;request::input-&gt;all()-&gt;save()-&gt;
  • 另外,我的模型包括地址,但要从另一个表单提交。我不想为此使用不同的控制器操作。
  • 我得到的用户信息不存在
  • 你在用户模型中定义了关系吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多