2015-10-28 6 views
2

Когда я пытаюсь заполнить свою базу данных с помощью метода модели create так:Laravel Eloquent

public function registerDevice($command) { 
    $deviceId = $command->deviceId; 
    $deviceToken = $command->deviceToken; 

    $this->deviceId = $deviceId; 
    $this->deviceToken = $deviceToken; 

    Device::create(array('device_id' => $deviceId, 'device_token' => $deviceToken)); 
    $this->raise(new DeviceWasRegistered($this)); 
    return $this; 
} 

Запись делается, но только временные метки в настоящее время обновления. Поля значений пусты. Никакой ошибки не происходит или что-то еще не работает. Но значения, которые я хочу поместить в db, есть, если я var_dump переменные.

Я пропустил что-то?

+1

Можете ли вы показать модель? Вероятно, вы не заполнили 'protected $ fillable' – Daan

ответ

2

Для того чтобы метод создания работал, вам нужно поместить ваши два поля в массив $fillable на модели. Поэтому убедитесь, что у вас есть это в вашей модели:

protected $fillable = [ 
    'device_id', 
    'device_token', 
]; 

Вы можете прочитать больше о методе create и массового назначения в http://laravel.com/docs/5.1/eloquent#mass-assignment.

+0

Haaaaaaaaa !! У меня было deviceId и deviceToken там! Нет, он работает отлично! – sesc360

+0

Я не уверен, но не является атрибутом fillable, определяющим, какие атрибуты получают ** массовое присвоение **? Он назначает их вручную, поэтому это не должно быть проблемой. Если он будет делать «Device :: create» ($ request-> input()), и он пропускает поля в заполняемом, то это не сработает. Или я ошибаюсь? – Krenor

+0

@Krenor нет, прочитайте код еще раз. Он выполняет '$ this-> deviceId' и' $ this-> deviceToken' в контроллере, а затем передает массив методу 'create', следовательно, присваивает массу. – Phroggyy