【问题标题】:Updating Data to db in Laravel在 Laravel 中将数据更新到 db
【发布时间】:2017-04-04 01:49:32
【问题描述】:

我在 laravel 中将数据更新到数据库时遇到问题。通常,数据通过存储功能(POST 请求)插入到数据库中。但是更新 POST 请求不会更新数据库。我的代码是

routes.php

Route::resource('Customer','CustomerDetailController');
Route::get('/', function () {
return view('welcome');
});

型号 CustomerDetail.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CustomerDetail extends Model
{
//

public $table = "customer_details";
protected $fillable = [
'Name', 'Contact_Number','Address','NoOfCans','Price'
];
}

控制器 CustomerDetailController.php

<?php

namespace App\Http\Controllers;
use App\CustomerDetail;

use Illuminate\Http\Request;

use App\Http\Requests;

class CustomerDetailController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    //
    $Customers=CustomerDetail::all();
    if($Customers){

    $response = [
        'msg' => 'Customer Found',
        'Customer' => $Customers
    ];
    return response()->json($response, 201);
  }
  else {
    $response=[
      'msg'=>'No Customer Found',
    ];
    return response()->json($response, 404);
  }
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    //
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //

    $this->validate($request, [
        'Name' => 'required',
        'Contact_Number' => 'required',
        'Address' => 'required',
        'NoOfCans' => 'required',
        'Price' => 'required',
    ]);

    $Name = $request->input('Name');
    $Contact_Number = $request->input('Contact_Number');
    $Address = $request->input('Address');
    $NoOfCans = $request->input('NoOfCans');
    $Price = $request->input('Price');

    $CustomerDetail = new CustomerDetail([
        'Name' => $Name,
        'Contact_Number' => $Contact_Number,
        'Address' => $Address,
        'NoOfCans' => $NoOfCans,
        'Price' => $Price
    ]);
    if ($CustomerDetail->save()) {

        $response = [
            'msg' => 'Customer Created',
            'Customer' => $CustomerDetail
        ];
        return response()->json($response, 201);
    }
    $response = [
        'msg' => 'An Error Occured',
    ];
    return response()->json($response, 502);


}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //

    $Customer=CustomerDetail::find($id);
    if($Customer){

    $response = [
        'msg' => 'Customer Found',
        'Customer' => $Customer
    ];
    return response()->json($response, 201);
  }
  else {
    $response=[
      'msg'=>'Customer Not Found',
    ];
    return response()->json($response, 404);
  }


}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    //
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    //
    $this->validate($request, [
        'Name' => 'required',
        'Contact_Number' => 'required',
        'Address' => 'required',
        'NoOfCans' => 'required',
        'Price' => 'required',
    ]);


    $CustomerUpdate = CustomerDetail::find($id);
    $CustomerUpdate->Name = $request->input('Name');
    $CustomerUpdate->Contact_Number = $request->input('Contact_Number');
    $CustomerUpdate->Address = $request->input('Address');
    $CustomerUpdate->NoOfCans = $request->input('NoOfCans');
    $CustomerUpdate->Price = $request->input('Price');

    if ($CustomerUpdate->save()) {

        $response = [
            'msg' => 'Customer Updated',
            'Customer' => $CustomerUpdate
        ];
        return response()->json($response, 201);
    }
    $response = [
        'msg' => 'An Error Occured',
    ];
    return response()->json($response, 502);

}

}

当我发出存储为的发布请求时,数据被插入

{
"Name":"MRK",
"Contact_Number":"1234567890",
"Address":"newyork",
"NoOfCans":"3",
"Price":"20"
}

带输出

{
 "msg": "Customer Created",
 "Customer": {
 "Name": "MRK",
 "Contact_Number": "1234567890",
 "Address": "newyork",
 "NoOfCans": "3",
 "Price": "20",
 "updated_at": "2016-11-20 17:17:55",
 "created_at": "2016-11-20 17:17:55",
 "id": 4
}
}

但是当我尝试使用 PUT 或 PATCH 请求更新相同的数据时

输入

{
    "Name":"MRK",
    "Contact_Number":"9876543210",
    "Address":"Chennai",
    "NoOfCans":"2",
    "Price":"20"
}

我将 JSON 响应显示为已更新,但我没有看到数据库中的值已更新

{
  "msg": "Customer Updated",
  "Customer": {
    "ID": 4,
    "created_at": "2016-11-20 17:17:55",
    "updated_at": "2016-11-20 17:20:44",
    "Name": "MRK",
    "Contact_Number": "9876543210",
    "Address": "Chennai",
    "NoOfCans": "2",
    "Price": "20"
  }
}

数据库包含最初插入的值。没有更新的值被插入到数据库中

enter image description here

更新代码

public function update(Request $request, $id)
 {
    //
    $this->validate($request, [
        'Name' => 'required',
        'Contact_Number' => 'required',
        'Address' => 'required',
        'NoOfCans' => 'required',
        'Price' => 'required',
    ]);


    $CustomerUpdate = CustomerDetail::find($id);
    $CustomerUpdate->Name = $request->input('Name');
    $CustomerUpdate->Contact_Number = $request->input('Contact_Number');
    $CustomerUpdate->Address = $request->input('Address');
    $CustomerUpdate->NoOfCans = $request->input('NoOfCans');
    $CustomerUpdate->Price = $request->input('Price');

    if ($CustomerUpdate->save()) {

        $response = [
            'msg' => 'Customer Updated',
            'Customer' => $CustomerUpdate
        ];
        return response()->json($response, 201);
    }
    $response = [
        'msg' => 'An Error Occured',
    ];
    return response()->json($response, 502);

}

【问题讨论】:

  • 可以把更新方法发到CustomerDetailController
  • 是的,使用来自 CustomerDetailController 的更新方法,我试过但没有用
  • 我是 laravel 新手,请您详细说明
  • CustomerDetailController 中你应该有一个update 函数。我们需要查看该代码。
  • 我已经用更新代码编辑了我的问题

标签: php mysql laravel


【解决方案1】:

问题出在模型上。我的模型中没有提到主键,所以数据库没有更新

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class CustomerDetail extends Model
{
//

public $table = "customer_details";
Protected $primaryKey = "ID";
protected $fillable = [
'Name', 'Contact_Number','Address','NoOfCans','Price'
];
}

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 2014-12-02
    • 1970-01-01
    • 2018-06-30
    • 2016-04-20
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多