Laravel FirstOrCreate和Save()重复输入

时间:2014-07-02 21:26:46

标签: php laravel-4 eloquent on-duplicate-key

我有一张这样的表

Schema::create('user', function(Blueprint $table)
        {
            $table->increments('id');
            $table->datetime('DateTimeCode');
            $table->integer('user_id');
            $table->integer('Foo');
            $table->softDeletes();
            $table->timestamps();

            $table->unique(array('user_id', 'DateTimeCode'));
        });

当我尝试

User::firstOrCreate($SomeData);

或者

$new_user = new User($SomeData);
$new_user->save();

我得到了

Integrity constraint violation: 1062 Duplicate entry

我不明白,因为我认为我的唯一值已明确定义,save()firstOrCreate()只应插入新记录(如果尚未存在)。

2 个答案:

答案 0 :(得分:1)

我也遇到了同样的问题...我用一个特质用稍微不同的方法解决了这个问题,然后从这里开始: https://gist.github.com/troatie/def0fba42fcfb70f873b7f033fbe255f

简而言之,我解释了为什么使用这种方法。我不喜欢发生很少发生的事件的常规数据库锁定,由于firstOrCreate有问题,我们每两天在繁忙的服务器上发生一次异常。要锁定并删除每次创建的锁定,以免发生这种罕见的事件……好吧……这种方法在发生时要小心,因为我很偏执,因此我不仅仅需要双重照顾。

shuffle([a,b],[c,d],L)

答案 1 :(得分:0)

$table->increments('id');
$table->integer('user_id');

$table->unique(array('user_id', 'DateTimeCode'));

您的user_id是唯一的,没有递增。每次尝试创建用户时,都会采用相同的user_id - 这是不可能的。