2017-05-14 34 views
1

我有更新我的单条记录在数据库laravel麻烦。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); 
    } 
} 

回答

1

只是检查是否请求数据是空的,例如:

$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); 
2

你可以做到这一点的是这样的默认值(记住在你的模型$可填写)。

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

将模型中的增变器设置为哈希密码。 :)

祝您好运:D

2

您可以直接使用请求输入的更新方法。这只会更新提供的输入。

$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); 
} 
1
<?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); 
    } 
} 

?>