[英]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.