首页 文章

在Laravel中将数据更新到db

提问于
浏览
2

我在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);

}

1 回答

  • 0

    问题出在模型上 . 我没有在模型中提到主键,因此数据库没有更新

    <?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'
    ];
    }
    

相关问题