【问题标题】:Laravel 5.3 Update method not workingLaravel 5.3 更新方法不起作用
【发布时间】:2017-06-21 13:25:01
【问题描述】:

我正在开发一个 API 我有一个资源控制器来 CRUD 驱动程序,在我的更新功能中我收到了这个错误

QueryException in Connection.php line 770:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'registration_center' cannot be null (SQL: update `drivers` set `registration_center` = , `registration_date` = 04-02-2017, `sponsor_name` = , `event_name` = , `registration_id` = 040217001, `profile_photo` = , `first_name` = , `last_name` = ,`updated_at` = 2017-02-04 04:54:54 where `id` = 3)

我在我的更新方法中做了dd($request);,我得到了所有的 JSON 响应

Request {#40
  #json: ParameterBag {#32
    #parameters: array:1 [
      "data" => array:61 [
        "id" => 3
        "agent_id" => "201705"
        "registration_center" => "dfgsdfgdfgdsdfgdf"
        "registration_date" => "03-02-2017"
        "sponsor_name" => "Sponser Name"
        "event_name" => "RC"
        "registration_id" => "FRTGHY030217001"
        "profile_photo" => ""","
        "first_name" => "Walter"
        "last_name" => "White"
        "created_at" => "2017-01-24 10:08:42"
        "updated_at" => "2017-02-03 11:33:52"
        "deleted_at" => null
      ]
    ]
  }

但是对于dd($request->registration_center);,我得到的是NULL

我的方法

public function update(Request $request, $id)
{
    $update_driver = Driver::find($id);

    $update_driver->registration_center = $request->registration_center;
    $update_driver->registration_date = $request->registration_date;
    $update_driver->sponsor_name = $request->sponsor_name;
    $update_driver->event_name = $request->event_name;
    $update_driver->registration_id = $request->registration_id;
    $update_driver->profile_photo = $request->profile_photo;
    $update_driver->first_name = $request->first_name;
    $update_driver->last_name = $request->last_name;                        
    $update_driver->save();

    return $this->respondUpdated('Driver updated successfully');
}

我的路线是

Route::group(['prefix' => 'v1', 'middleware' => 'auth:api'], function() {
    Route::get('user', 'UsersController@index');
    Route::resource('drivers', 'DriversController'); //drivers CRUD
});

期待获得急需的帮助

谢谢

【问题讨论】:

  • 解码你的 json 数据。
  • 搜索json_decode的php函数
  • 您如何调用update 方法并分享您在json_decode($request) 中获得的内容?
  • @Rishi 我正在使用邮递员 PUT 请求来测试 api,当我 $request = json_decode($req); dd($request); 时我得到了 NULL
  • @MrRobot dd($request->all()); 显示什么?

标签: php laravel rest api laravel-5.3


【解决方案1】:

从 Laravel 请求中访问 POST 数据的一般方法是使用 input 方法。

$field = $request->input('field');

看看你的例子,Request 对象中似乎有一个 data 字段,它是一个关联数组,registration_center 在里面。如果我猜对了,那么在你的情况下,你会使用:

$update_driver->registration_center = $request->input('data')['registration_center'];

// or, using Laravel's "dot"-syntax
$update_driver->registration_center = $request->input('data.registration_center');

访问数据。对于您尝试检索的所有其他值也是如此。

【讨论】:

  • 感谢您抽出宝贵的时间,我在 POSTman 中做了dd($request->input('data.registration_center'));,我得到了回复NULL,但如果我这样做了dd($request->all());,我得到了所有的价值
  • 好的,让我们尝试调试一下。当您执行dd($request->input('data')); 时,您会得到什么?
  • 非常感谢您抽出宝贵的时间,非常感谢,现在我没有将数据存储在关联数组中,我只是发送一个 JSON 对象,一切正常,谢谢
  • 很高兴我能帮上忙! :)
  • 如果值由于某种原因没有更新,请告诉我如何显示错误
【解决方案2】:

由于它是一个数组,因此您需要通过以下方式访问它:

$request['data']['registration_center'];

【讨论】:

猜你喜欢
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多