5

我创建了一个名为 Author 的模型。我尝试在 eloquent create 方法的帮助下创建一个模型,如下所示:

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

'user' 和 'info' 是表单元素的名称。我相信我没有误会错字。当我运行它时,没有创建模型并显示 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 方法,它看起来更干净,更简单。

4

5 回答 5

10

这应该适合你:

1) 正如@fideloper 和@the-shift-exchange 已经列出的那样,在您的作者模型中,您需要创建以下字段(这是您希望可用于自动填充 [mass assignment] 的所有数据库列的白名单)

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

2)使用下面的代码来触发质量分配机制

$author = new Author;
$author->fill(Input::all());
$author->save();
于 2013-09-09T14:54:32.503 回答
3

当我像这样扩展我的模型时,我得到了 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

于 2014-03-29T08:34:56.987 回答
2

您需要设置批量分配字段。在您的作者模型中:

类作者扩展雄辩{

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

}

于 2013-09-09T14:00:32.747 回答
1

您的模型需要设置 $fillable 变量。

有关详细信息,请参阅有关批量分配的文档。

在您的 Author 模型中,它看起来像这样:

protected $fillable = array('user', 'info');
于 2013-09-09T14:00:03.037 回答
0

您需要protected $fillable通过为其分配要填充/分配值的字段/列数组来使用属性。例如,您有一个带有 fields 的模型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)。

希望它会帮助你和其他人。

于 2016-06-02T19:19:19.857 回答