updateOrCreate - Laravel 中的批量分配异常

Posted

技术标签:

【中文标题】updateOrCreate - Laravel 中的批量分配异常【英文标题】:updateOrCreate - Mass Assignment Exception in Laravel 【发布时间】:2016-01-09 20:05:14 【问题描述】:

我正在处理我系统的一个 CRUD 部分。用户可以更新关键字。我想做的类似于INSERT IGNORE mysql 语句。

我在一个 foreach 循环中并试图更新关键字,但是我得到了一个

批量分配异常

错误

我当前的代码如下,我做错了什么吗?

// Save The Keywords...
$kwords = Input::get('keywords');

foreach($kwords as $key => $value)

    // Save The Keywords...
    Keywords::updateOrCreate( array('pack_id'=> $pack->pack_id, 'keyword_title' => $value));

干杯

【问题讨论】:

【参考方案1】:

您需要在模型上定义 $fillable 或 $guarded 属性。如果您希望除 id 之外的所有内容都可以填写,您可以按照以下方式定义:

class Keywords extends Model 
    protected $guarded = array('id');

【讨论】:

【参考方案2】:

如果您尝试批量分配模型类定义中未指定的字段,Laravel 会抱怨。

这与恶意用户可能会尝试在您的模型中分配不应从应用程序用户更新的文件(即向表单添加一些参数)这一事实有关

为了能够批量分配字段,您必须在模型中指定您希望“批量分配”的所有字段:

class Keywords extends Eloquent 

    protected $fillable = array('pack_id', 'keyword_title');


或者,您可以使一些字段受到保护(不可批量分配),而所有其他字段都可以批量分配:

class Keywords extends Eloquent 

    protected $guarded = array('guarded_field');


如果您使用的是 Laravel 4,请查看here 了解更多信息

【讨论】:

嗨@Moppo 这适用于没有关系的模型。但是,我有另一个有关系的模型,它不起作用。有什么想法吗? 检查here 看看是否有帮助,否则我建议发布一个包含所有代码详细信息的新问题

以上是关于updateOrCreate - Laravel 中的批量分配异常的主要内容,如果未能解决你的问题,请参考以下文章

updateOrCreate - Laravel 中的批量分配异常

PHP Laravel,方法 updateOrCreate 的替换

我们可以将模型传递给雄辩的Laravel的updateOrCreate方法吗?

在 Laravel 中使用 updateOrCreate 进行多数据插入

Laravel:使用同步或 updateOrCreate 更新父表和子表?

laravel中firstorcreate和updateorcreate的操作区分