Невозможно создать модель с помощью метода создания Eloquent. Ошибка сообщения MassAssignMentException

Я создал модель под названием Автор. Я пробовал создать модель с помощью такого красноречивого метода создания:

public function postCreate(){
   Author::create(array(
       'user' => Input::get('user'),
       'info' => Input::get('info') 
   ));
   return Redirect::to('authors')
        ->with('message', 'User created successfully');
}

«пользователь» и «информация» - это названия элементов формы. Я уверен, что не ошибся с опечаткой. Когда я запускаю это, модели не создаются и сообщает MassAssignmentException.

Но когда я попробовал следующий метод, модель была создана и сохранена в таблице.

public function postCreate(){

    $author = new Author;
    $author->name = Input::get('user');
    $author->info= Input::get('info');
    $author->save();

    return Redirect::to('authors')
        ->with('message', 'User created successfully');

}

И я действительно хочу использовать метод create, он просто выглядит намного чище и проще.


person Nirmalz Thapaz    schedule 09.09.2013    source источник
comment
Есть ли в модели Автор поля пользователя и информации или поля пользователя и биографии?   -  person fideloper    schedule 09.09.2013
comment
@fideloper мой плохой, это "пользователь" и "информация" .. Я исправил это, спасибо за указание   -  person Nirmalz Thapaz    schedule 09.09.2013


Ответы (5)


это должно сработать для вас:

1) как уже указано @fideloper и @ the-shift-exchange, в вашей модели Author вам необходимо создать поле ниже (это белый список всех столбцов базы данных, которые вы хотите сделать доступными для автопопуляции [массовое назначение])

 protected $fillable = array('user','info', ... ,'someotherfield'); 

2) используйте приведенный ниже код для запуска механизма массового назначения

$author = new Author;
$author->fill(Input::all());
$author->save();
person Gadoma    schedule 09.09.2013

Я получал исключение MassAssignmentException, когда расширял свою модель таким образом.

class Author extends Eloquent {

}

Я пытался вставить такой массив

Author::create($array);//$array was data to insert.

Проблема была решена, когда я создал модель автора, как указано ниже.

class Author extends Eloquent {
    protected $guarded = array();  // Important
}

Ссылка https://github.com/aidkit/aidkit/issues/2#issuecomment-21055670

person Amit Garg    schedule 29.03.2014

Вам необходимо установить поля массового назначения. В вашей модели автора:

class Author расширяет Eloquent {

protected $fillable = array('name', 'bio');

}

person Laurence    schedule 09.09.2013

В вашей модели должна быть установлена ​​переменная $ fillable.

Дополнительную информацию см. В документации по массовому назначению.

В вашей модели Author это будет выглядеть примерно так:

protected $fillable = array('user', 'info');
person fideloper    schedule 09.09.2013
comment
все та же ошибка MassAssignMentException. Кстати читал документацию по Массовому назначению. Но это мне не сильно помогло. извините за боль, но что это значит: «назначаемый по массе» ... - person Nirmalz Thapaz; 09.09.2013
comment
это означает, что для атрибутов, которые вы указываете в $ fillable, включена функция massassign = вы можете автоматически заполнить их с помощью этого механизма. - person Gadoma; 09.09.2013
comment
Вы не можете использовать create() для fill() методов, не определив, какие поля могут быть назначены массово в заполняемом массиве. И наоборот, существует также защищенный массив < / а>. - person fideloper; 09.09.2013
comment
Теперь он работает, это была глупая ошибка с моей стороны. Я добавил это свойство в контроллер, что было ошибкой, при добавлении в модель оно сработало, спасибо - person Nirmalz Thapaz; 10.09.2013

Вам нужно использовать свойство protected $fillable, назначив ему массив полей / столбцов, которым вы хотите заполнить / присвоить значения. Например, у вас есть модель с полями f1, f2, f3 and f4. Вы хотите присвоить значения f1, f2 and f3 but not to f4, тогда вам нужно использовать:

protected $fillable = ['f1', 'f2', 'f3'];

Вышеупомянутая строка позволит передать массив в:

$mod = Model::create($arr);
$mod->save();

Что бы ни содержал массив $ arr, но только f1, f2, and f3 будут присвоены значения (если значения существуют в $arr array for f1, f2, f3).

Надеюсь, это поможет вам и другим.

person MKJ    schedule 02.06.2016