2016-07-10 3 views
0

У меня есть модельLaravel по умолчанию user_id атрибута в модели

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

} 

Я хотел бы установить Auth::user()->id по умолчанию user_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:

Если вы хотите установить значение по умолчанию для некоторые атрибуты, которые нужно использовать Наблюдателям.

<?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

Смежные вопросы