簡體   English   中英

Laravel僅更新單行

[英]Laravel update only single row

我在使用laravel更新數據庫中的單個記錄時遇到麻煩。

當我運行此方法並僅給requestparams指定“名稱”時,數據庫中的其他字段將為空白。 如何保留requestparams中未指定的值?

public function update(Request $request, $id)
{
    $user = User::find($id);
    if(!is_null($user)){
        $user->name = $request->input('name');
        $user->email = $request->input('email');
        $user->password = $request->input('password');
        $user->save();
    }else{
        $data = array('msg' => 'The user, you want to update, does not exist', 'error' => true);
        echo json_encode($data);
    }
}

您可以將update方法直接用於請求輸入。 這只會更新提供的輸入。

$user->update($request->only(['name', 'email', 'password']));

沒什么要注意的。 您正在嘗試直接從輸入中更新密碼。 這是一個不好的做法,可能是錯誤的,因為laravel默認使用bcrypt來存儲密碼。 其次,請確保您在模型中設置了$fillable屬性,以防止大規模分配。

protected $fillable = [
    'name', 'email', 'password'
];

同樣,您也可以使用mutator來對密碼進行哈希處理。

public function setPasswordAttribute($value)
{
    $this->attributes['password'] = bcrypt($value);
}

您可以使用默認值(類似於模型中的$ fillable)通過類似方法進行操作。

$user->update([
    'name' =>  $request->input('name', $user->name),
    'email' => $request->input('email', $user->password),
    'password' => $request->input('password', $user->password),
]);

將模型中的更改器設置為哈希密碼。 :)

祝你好運:D

只需檢查請求數據是否為空,例如:

$user->name = empty($request->name) ? $user->name : $request->name;
$user->email = empty($request->email) ? $user->email : $request->email;
$user->password = empty($request->password) ? $user->password : bcrypt($request->password);
<?php

use Illuminate\Support\Facades\Input;
use Hash;
use App\User;
use Validator;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class RegistrationController extends Controller
{

public function validator(array $data){ 

    return Validator::make($data, [
         'name' => 'required|max:255', //  Name
         'email' => 'required|email|max:255|unique:users', // Unique Email id
         'password' => 'required|min:6', //password min 6 charater

     ]);
  }



public function update(Request $request, $id)
{

 /* Called Validator Method For Validation */  
   $validation = $this->validator($request->all());


    $User = User::where('id',$id)->first(); /* Check id exist in table */

      if(!is_null($User)){

        $input = $request->all();
        $name = $input['name'];
        $email = $input['email'];
        $password = Hash::make($input['password']);

        User::where('id',$id)->update(
         array(
                 'name' => $name,
                 'email' => $email,
                 'password' => $password,
              )
         );


          $data = array('msg' => 'Updated successfully !! ', 'success' => true);
          echo json_encode($data);

    }else{

        $data = array('msg' => 'User Not Found !! ', 'error' => true);
        echo json_encode($data);
    }
}

?>

您可以這樣操作(此處的“ posts”是數據庫表名稱)

// write following statement in your model.
    use DB; 

     public function update($request, $id){
                $check = DB::Table('posts')->where('id',$id)->first(); 
                if(!is_null($check)){
                    $result =  DB::Table('posts')->where('id',$id)->update(
                    array(
                    'name' =>  $request->name,
                    'email' => $request->email,
                    'password' => $request->password
                    )
                    );
                    return $result = array('msg' => 'Updated successfully !! ', 'success' => true);
                }
                else{
                    return $result = array('msg' => 'User Not Found !! ', 'error' => true);
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM