Php Laravel 5:当持久化表单数据时,_标记导致批量分配异常

Php Laravel 5:当持久化表单数据时,_标记导致批量分配异常,php,forms,laravel-5,Php,Forms,Laravel 5,当我试图持久化表单数据时,Laravel抛出了一个大规模赋值异常 在视图中,我使用了{!!form::open(…)!!},我知道它创建了\u标记作为隐藏字段 当表单数据发送到控制器时,我使用 $data = Input::all(); $order = Order::create($data); $order->save(); 我应该在我的数据库中为\u令牌添加一个字段吗?或者我是因为做了其他错误而导致错误?通常会导致质量分配异常,因为您没有在模型中指定可填充的(或保护的相反)属性。这

当我试图持久化表单数据时,Laravel抛出了一个大规模赋值异常

在视图中,我使用了
{!!form::open(…)!!}
,我知道它创建了
\u标记
作为隐藏字段

当表单数据发送到控制器时,我使用

$data = Input::all();
$order = Order::create($data);
$order->save();

我应该在我的数据库中为
\u令牌
添加一个字段吗?或者我是因为做了其他错误而导致错误?

通常会导致质量分配异常,因为您没有在模型中指定
可填充的
(或
保护的
相反)属性。这样做:

class Order extends Eloquent {
    protected $fillable = ['field1', 'foo', 'bar'];
}
通过这种方式,您也不必担心令牌问题,因为无论您传递给模型的其他内容是什么,数据库中只会填充和保存指定的字段。

protected $guarded = array();

确保将$filleble或$guarded放入app\Order.php文件,而不是app\Http\Controllers\OrderController.php文件。

回答您的初始问题。您可能想取消设置($request[''u token']);在创建之前。

这样可以吗<代码>类顺序扩展模型{protected$table='orders';protected$filleble=['field1','foo','bar']
是的。当然,您应该指定实际属性,而不是
field1
等。这只是一个示例。不要使用大量赋值,创建一个函数,将$request对象作为参数,并为模型指定所需的内容。它将为您提供一个位置来列出字段,就像它是$filleble属性一样,但是also(a)您可以获得更大的灵活性,并且(b)您可以在需要时在项目中搜索所有函数调用。我在使用批量分配时遇到的问题是,$fillable array应根据用户角色的不同而有所不同。我希望一开始就不要使用批量分配。当您调用
Order::create($data)时
它保存时,您不必在保存()之后再保存它。这是不使用质量分配的另一个原因。您可以控制保存模型的位置。