【问题标题】:Laravel seeding mass-assignment, can't see where I'm going wrongLaravel播种质量分配,看不到我哪里出错了
【发布时间】:2014-04-07 09:46:26
【问题描述】:

在我的播种机中:

    $model->create(array(
        'name' => 'Test name'
    ));

在我的模型中:

class Model extends Content {
        protected $fillable = array('name');
}

但是当我运行 create 方法时,记录只是在数据库中创建,名称字段为 NULL。

我做错了什么?

【问题讨论】:

    标签: laravel eloquent mass-assignment


    【解决方案1】:

    找到了解决办法。

    模型正在扩展扩展 Eloquent 的内容。

    我重写了 Content 中的构造函数,并且没有将 $attributes 数组传递给 Eloquent 构造函数。我需要改变这个:

    class Content extends Eloquent {
        public function __construct() {
            ...
            parent::__construct();
        }
        ...
    }
    

    到这里:

    class Content extends Eloquent {
    public function __construct($attributes = array()) {
            ...
            parent::__construct($attributes);
    }
        ...
    }
    

    【讨论】:

      【解决方案2】:

      在你的种子中,你需要“解除”Eloquent。

      https://github.com/laravel/framework/issues/736#issuecomment-15597996

      【讨论】:

        【解决方案3】:

        您同时指定了可填充属性和受保护属性。 你只需要其中一个!

        【讨论】:

        • 谢谢,试过了,但同样的事情正在发生。更新了我的问题。有什么想法吗?
        • 你运行这个命令吗? php artisan db:seed 如果是这样,请检查 app/database/seeds/DatabaseSeeder 并告诉我们它是否看起来像这样 github.com/laravel/laravel/blob/master/app/database/seeds/…
        • 另外你扩展了一个不是 Eloquent 的 Content 类,Content 扩展了 Eloquent?
        • 是的,我运行了该命令,是的,主播种机看起来像那样。内容确实扩展了 Eloquent,忘了说。
        • 啊! Content 模型没有将正确的参数传递给 Eloquent 构造方法,从而修复了它。谢谢! :)
        【解决方案4】:

        尝试在您的模型上使用它:

        class Model extends Content {
            protected $fillable = ['name'];
        }
        

        删除不必要的代码。

        或者在你的播种机上试试:

        Model::create(['name' => 'foobar']);
        

        或者在你的播种机上添加这个:

        Eloquent::unguard();
        

        【讨论】:

        • 谢谢,试过了,但同样的事情正在发生。更新了我的问题。有什么想法吗?
        • @tparson 你能提供更多代码并展示实际的类是什么吗?也许您正在使用不同的模型?还更新了我的答案。
        • 原来模型扩展了扩展 Eloquent 的内容,并且没有正确地将参数传递给 Eloquent 构造函数。感谢您的帮助!
        猜你喜欢
        • 2023-04-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多