Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔雄辩-独家交易。_Php_Transactions_Laravel 4_Locking_Eloquent - Fatal编程技术网

Php 拉威尔雄辩-独家交易。

Php 拉威尔雄辩-独家交易。,php,transactions,laravel-4,locking,eloquent,Php,Transactions,Laravel 4,Locking,Eloquent,我有一个表,有两列,a和B。集合(a,B)是唯一的,但B本身不是。每当我向表中添加一行时,我希望B获得下一个可用的数字-因此,如果表中有: A B 1 1 1 2 2 1 2 2 2 3 然后,如果A=1,插入的下一行将有B=3,如果A=2,插入的下一行将有B=4 因此,给定一个A,我需要从表中选择MAX(B)来知道新值应该是什么,然后运行insert。但是,我希望避免脚本的两个实例获得相同的B值的情况,因此我需要在将select和insert作为单个事务运行之前获得表

我有一个表,有两列,a和B。集合(a,B)是唯一的,但B本身不是。每当我向表中添加一行时,我希望B获得下一个可用的数字-因此,如果表中有:

A   B
1   1
1   2
2   1
2   2
2   3
然后,如果A=1,插入的下一行将有B=3,如果A=2,插入的下一行将有B=4

因此,给定一个A,我需要从表中选择MAX(B)来知道新值应该是什么,然后运行insert。但是,我希望避免脚本的两个实例获得相同的B值的情况,因此我需要在将select和insert作为单个事务运行之前获得表上的独占锁

我能想到的唯一替代方法是编写一个原始数据库查询,执行insert…select,因为eloquent不支持这一点。如果可能的话,我宁愿使用雄辩的功能。那么,有没有办法从laravel那里获得一张桌子的专用锁


这几乎是的重复,但公认的答案是“以不同的方式执行”,这在本例中不起作用。

如果我能很好地理解,如果脚本的两个实例获得相同的b值,它们也将具有相同的(a,b)主键,然后无法插入第二个,并将引发异常。对吗?@momo对。捕获异常是一种选择,但不是理想的选择——我宁愿一开始就不抛出它。您的表使用什么存储引擎?@eggyal InnoDB。但这有关系吗?问题是关于雄辩的功能,因为它是相关的。