【问题标题】:Laravel - Mass Assignment Exception errorLaravel - 批量分配异常错误
【发布时间】:2014-11-03 22:05:43
【问题描述】:

我正在尝试将多行保存到一个表中,但是,我收到了 Mass Assignment Error。

错误是:Illuminate \ Database \ Eloquent \ MassAssignmentException criteria_id

$criteria->save();

    $criteria_id = $criteria->id;

     foreach(Input::get('bedrooms') as $bedroom){
        $new_bedroom=array(
            'criteria_id' => $criteria->id,
            'bedroom' => $bedroom,
            );
        $bedroom = new Bedroom($new_bedroom);
        $bedroom->save();
    }

我的数据库结构是:

所以没有任何拼写错误。 criteria_id 来自最近保存的标准的变量(参见上面的代码 forloop)。

任何帮助将不胜感激。

【问题讨论】:

  • criteria_id在模型的$fillable数组中吗?
  • @lukasgeiter,不,不是。数组为空。我必须稍后在代码中访问该变量,该代码工作得非常好,也就是在foreach 循环内。 - ->attach($criteria_id).

标签: php laravel laravel-4 eloquent


【解决方案1】:

为了能够通过将属性传递给模型的构造函数来设置属性,您需要在$fillable 数组中列出您需要的所有属性。如Docs中所述

class Bedroom extends Eloquent {
    protected $fillable = array('criteria_id', 'bedroom');
}

如果需要,您也可以使用create 方法。它创建一个新模型并直接保存:

foreach(Input::get('bedrooms') as $bedroom){
    $new_bedroom=array(
        'criteria_id' => $criteria->id,
        'bedroom' => $bedroom,
        );
    $bedroom = Bedroom::create($new_bedroom);
}

【讨论】:

  • 从来不知道像 ruby​​ on rails attr_accessible
【解决方案2】:

lukas 所说的逆向是“守卫”。您可以声明哪些是受保护的,而不是“白名单”字段。

例如:

class Bedroom extends Model
{
    protected $guarded = ['id'];
}

这对我更有用,因为我并不真正关心大多数领域。

从 Laravel 5.2 的文档中获得,但我认为它适用于旧版本。

要允许任何字段,您可以只提供一个空数组:

class Bedroom extends Model
{
    protected $guarded = [];
}

【讨论】:

    【解决方案3】:

    在模型中编写要在该表上存储数据的代码。 假设你的桌子是卧室,你创建的模型是卧室,它位于 app 文件夹中。

    在你的情况下,你必须将数据存储在$criteria_id和$bedroom,所以你应该通过以下方式将这两个字段添加到模型中。

    class Bedroom extends Model 
    {
        protected $fillable = ['criteria_id', 'bedroom'];
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2012-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多