updateOrCreate - Laravel

时间:2015-10-12 11:03:37

标签: php laravel laravel-4 laravel-5 mass-assignment

我正在研究我系统的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));
}

干杯

2 个答案:

答案 0 :(得分:5)

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

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

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

class Keywords extends Eloquent {

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

}

或者,你可以保护一些字段(不可分配),所有其他字段都可以分配:

class Keywords extends Eloquent {

    protected $guarded = array('guarded_field');

}

如果您使用的是Laravel 4,请查看here以获取更多信息

答案 1 :(得分:2)

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

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