2016-07-10 60 views
0

我有一個模型Laravel默認屬性USER_ID在型號

class Foo extends Model 
{ 
    protected $fillable = [ 
     'name', 
     'user_id' 
    ]; 

} 

我想,缺省設置Auth::user()->iduser_id列。於是我說:

class Foo extends Model 
{ 
    protected $fillable = [ 
     'name', 
     'user_id' 
    ]; 

    public function setUserIdAttribute() 
    { 
     $this->attributes['user_id'] = Auth::user()->id; 

    } 
} 

從我的控制,我呼籲Foo::create($data)沒有user_id關鍵。 但它沒有按預期工作。 store()給出Integrity constraint violation,因爲缺少user_id。 (用戶已登錄以實現創建頁面)

回答

3

您提供了一個使用訪問器的示例。

https://laravel.com/docs/5.1/eloquent-mutators#accessors-and-mutators

來自官方的文檔:

訪問者將自動雄辯試圖檢索FIRST_NAME的值時,被稱爲:

如果你想設置爲默認值您需要使用Observers的一些屬性。

<?php 
// file app/models/Foo.php 
namespace App\Models; 

use App\Observers\FooObserver; 

class Foo extends Model 
{ 
    protected $fillable = [ 
     'name', 
     'user_id' 
    ]; 

    public static function boot() { 
     parent::boot(); 
     parent::observe(new FooObserver); 
    } 
} 

<?php 
// file app/observers/FooObserver.php 
namespace App\Observers; 

use App\Models\Foo; 

class FooObserver { 

    public function creating(Foo $model) { 
     $this->user_id = Auth::user()->id; 
    } 
} 

關於在官方文檔模型觀察: https://laravel.com/docs/5.0/eloquent#model-observers