2013-06-06 1 views
1

У меня есть модель, которая, кажется, не быть массовым назначаемыми, даже если я заполнил $fillable полей:массового назначения Laravel не будет заполнить поля

class LoginAttempt extends Eloquent 
{ 
    protected $table = 'login_history'; 
    protected $fillable = array('remote_addr', 'user_agent', 'successful'); 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 
} 

, который использует эту схему:

  • login_history
    • ID
    • user_id
    • remote_addr
    • user_agent
    • успешно
    • created_at
    • updated_at

Когда я масса присвоить экземпляр с этими переменными,

$vars = array(
    'remote_addr' => $_SERVER['REMOTE_ADDR'], 
    'user_agent' => $_SERVER['HTTP_USER_AGENT'], 
    'successful' => false, 
); 

print_r($vars); 
=> array('remote_addr' => '127.0.0.1', 'user_agent' => 'Moz..', 'successful' => false); 

new LoginAttempt($vars); 
=> LoginAttempt instance, attributes => array() 

LoginAttempt::create($vars); 
=> LoginAttempt instance, attributes => array() 

$login = new LoginAttempt; 
$login->fill($vars); 
=> LoginAttempt instance, attributes => array() 

$login = new LoginAttempt; 
$login->remote_addr = $vars['remote_addr']; 
$login->user_agent= $vars['user_agent']; 
$login->successful= $vars['successful']; 
=> LoginAttempt instance, attributes => array('remote_addr' => '..', 'user_agent' => '..', 'successful' => false) 

Я думаю, что я использую $fillable как описывают документы - почему я В этом случае работает массовое присвоение?

+0

Спасибо за этот прекрасный пример рабочего кода. :) –

ответ

4

Оказывается, это было в Laravel a bug (был fixed) - все поля охраняются по умолчанию (protected $guarded = array('*');), которые затем взяли верх над $fillable.