2016-10-05 9 views
1

このコード部分を問題なく何度も使用しています。しかし今回は$ successがnullを返し、私は理解できませんでした。私はデータベースをチェックすると、私はユーザー1が更新されて参照してください。それが節約されているので、充てん可能な問題はありません。私もsave()関数を試しました。私は何が欠けていますか?手伝ってくれてありがとう。Laravelはデータの保存または更新時にnullを返します

(Laravelのバージョン5.2.45)

$user = User::find(1); 
$user->firstname = $request->firstname; 
$user->lastname = $request->lastname; 
$success= $user->update(); // Database update is successful 
dd($success); // But return null 

Userモデル

<?php 
namespace App; 

use App\Presenters\UserPresenter; 
use App\Services\Logging\UserActivity\Activity; 
use App\Support\Authorization\AuthorizationUserTrait; 
use App\Support\Enum\UserStatus; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Auth\Passwords\CanResetPassword; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; 
use Zizaco\Entrust\Traits\EntrustUserTrait; 
class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract 
{ 
use CanResetPassword, AuthorizationUserTrait; 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'users'; 

protected $dates = ['last_login', 'birthday']; 
/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $guarded = []; 

/** 
* The attributes excluded from the model's JSON form. 
* 
* @var array 
*/ 
protected $hidden = ['password', 'remember_token']; 

public function items() 
{ 
    return $this->hasMany('App\Item'); 
} 
/** 
* Always encrypt password when it is updated. 
* 
* @param $value 
* @return string 
*/ 
public function setPasswordAttribute($value) 
{ 
    $this->attributes['password'] = bcrypt($value); 
} 

public function gravatar() 
{ 
    $hash = hash('md5', strtolower(trim($this->attributes['email']))); 

    return sprintf("//www.gravatar.com/avatar/%s", $hash); 
} 

public function isUnconfirmed() 
{ 
    return $this->status == UserStatus::UNCONFIRMED; 
} 

public function isActive() 
{ 
    return $this->status == UserStatus::ACTIVE; 
} 

public function isBanned() 
{ 
    return $this->status == UserStatus::BANNED; 
} 

public function city() 
{ 
    return $this->belongsTo(City::class, 'city_id'); 
} 
public function activities() 
{ 
    return $this->hasMany(Activity::class, 'user_id'); 
} 
public function getRememberToken() 
{ 
    return $this->remember_token; 
} 

public function setRememberToken($value) 
{ 
    $this->remember_token = $value; 
} 

public function getRememberTokenName() 
{ 
    return 'remember_token'; 
} 
public function getAuthIdentifier() 
{ 
    return $this->getKey(); 
} 

public function getAuthpassword() 
{ 
    return $this->password; 
} 

public function getAuthIdentifierName() 
{ 
    return $this->getKeyName(); 
} 
public function verification() 
{ 
    return $this->hasOne('App\Verification'); 
} 
} 

更新質問(新TRY):

私はちょうど機能を更新すると、空のコントローラを試してみました。私はまだ失敗する。

UserController.php

<?php 

namespace App\Http\Controllers; 

use App\User; 
use Auth; 
use Illuminate\Http\Request; 

class UserController extends Controller 
{ 

public function getEdit() 
{ 
    $user = User::find(1); 
    return view('user.editprofile', compact('user')); 
} 

public function postEdit(Request $request) 
{ 
    $user = User::find(1); 
    $user->firstname = $request->firstname; 
    $user->lastname = $request->lastname; 
    if($user->update()) 
    { 
     echo "Success"; 
    } 
    echo "Fail"; // Print "Fail" but update was successful. 
} 

} 
+0

'$ user-> update()'はfalseを返しますが、更新は成功しましたか?奇妙な! –

+0

はい、Sanzeeb、それが奇妙な理由です。私は毎回成功の方法を使用し、このような問題は決してありませんでした。また、ユーザーの電話番号を更新するControllerには別の機能があり、$ successは問題なくtrueを返します。同じコード、働いているもの、そうでないもの。 –

+0

ソースコードを見ましたが、NULLを返すことはオプションではありません(モデル更新メソッドをオーバーライドしない限り) –

答えて

0

に私はこの問題を考え出しました。保存と更新機能を無効にする特性があります。

use App\Support\Authorization\AuthorizationUserTrait 
1

正常に挿入またはレコードを更新すると、成功した場合にTRUE、失敗するとfalseを返しlaravelともあなたはこのように確認することができます。

if($user->save()){ 
    //do something when user is save 
}else{ 
    // do something wehn user is not update 
} 

または

if($user->update()){ 
    //do something when user is update 
}else{ 
    // do something wehn user is not update 
} 
+1

ありがとうAnuraj、私もこれを試しましたが、nullを返して他の部分に移動します –

+0

あなたのユーザーモデル@GokhanDemirel .. あなたのテーブルとfillableのためのコードはありますか? このように.. ** protected $ table = 'users'; protected $ fillable = ['username'、 'password']; ** – anuraj

+0

私の質問にユーザーモデルを追加しました –

0

私は通常、メイクのためにこれをしなかったが確認正常に保存されて

DB::beginTransaction(); 
DB::commit(); 
DB::rollback(); 

ため

try { 
    DB::beginTransaction(); 
    // save or update happen in here 
    DB::commit(); 
} catch (\Exception $e) { 
    DB::rollback(); 
    // something happen in here when error 
} 

は任意ですが、私はそれをお勧めするときは何も悪い原因途中で起こるあなたのために保存されたデータを消去してください。

0

アレイを使用してユーザーを更新してください。この

$user = User::find(1); 
$dataToUpdate['firstname'] = $request->firstname; 
$dataToUpdate['lastname'] = $request->lastname; 
if($user->update($dataToUpdate)) 
{ 
    echo "Success"; 
} 
echo "Fail"; // Print "Fail" but update was successful. 

また、追加しようとすることができるように:

protected $fillable = ['firstname', 'lastname']; 

あなたUser.phpモデル

関連する問題