我有一张这样的表
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()
只应插入新记录(如果尚未存在)。
答案 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 - 这是不可能的。