2016-07-10 3 views
0

에 내가 user_id 열 기본적으로 Auth::user()->id을 설정하려는 모델Laravel의 기본 모델

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

} 

이 속성 USER_ID.

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

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

    } 
} 

을 그리고 내 컨트롤러에서 나는 user_id 키없이 Foo::create($data)을 요구하고있어 : 그래서 덧붙였다. 그러나 예상대로 작동하지 않습니다. store()user_id가 없기 때문에 Integrity constraint violation이됩니다. (이미 사용자가 페이지를 만들기 위해 로그인 한 상태 임)

답변

3

접근자를 사용한 예를 제공합니다. 공식 문서에서

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

:

FIRST_NAME의 값을 검색하려고 할 때 접근이 자동으로 웅변에 의해 호출됩니다

당신이 디폴트 값을 설정하려면 옵저버를 사용해야하는 일부 속성. https://laravel.com/docs/5.0/eloquent#model-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; 
    } 
}