php - 如何使用 Laravel 管理数据库表中的 'order' 列?

标签 php mysql sql laravel laravel-4

我没有找到太多关于 Laravel 数据库锁的信息,文档也非常模糊。 所以,假设我有这张表:

 item
+–––––––––––––––––––––--+
|id         int(10)     |
|name       varchar(255)|
|parent_id  int(10) [FK]|
|order      int(10)     |
+–––––––––––––––––––––--+

我想锁定它(可以是整个表,但如果只是选定的行会更好,通常是具有相同 parent_id 的行),然后更新这些行上的顺序列,考虑到几个人正在同时更新。

我知道最后保存它的用户会覆盖订单,在这种情况下没关系,我唯一不能让发生的是以下情况:

User A, B
A saves item[1] with order = 1
A saves item[2] with order = 2
B saves item[1] with order = 2
B saves item[2] with order = 3
B saves item[3] with order = 1
A saves item[3] with order = 3

End result:
item[1]->order = 2
item[2]->order = 3
item[3]->order = 3

那里有不一致之处。 我计划在 (parent_id, order) 列上创建一个 UNIQUE 索引,以防止不一致,但我仍然需要锁来为用户提供响应(只是让更新失败不是解决方案)。

也许用UNIQUE索引加上一个事务就可以解决了? 像这样的东西:

DB::transaction(function() use($item, $newOrderArrayOrSomething) {
    // $item->order updates
});

提前致谢。

最佳答案

试试这个:

DB::transaction(function() use($item, $newOrderArrayOrSomething)
         {
            $item= Item::find($item);
            $item->order= $newOrderArrayOrSomething;
            $item->save();
         });

关于php - 如何使用 Laravel 管理数据库表中的 'order' 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22958867/

相关文章:

php - 如何在 PHP 中解密密码哈希?

mysql - 100K以上记录的mysql表如何正常添加一列?

mysql - 如何获得最后n分钟的速度

mysql - SQL:每个 GROUP BY 增量

php - 为什么禁用 WordPress wpautop 功能不起作用?

需要 PHP Laravel Mcrypt PHP 扩展

php - 从 php foreach 插入多行

c# - C# 中使用动态 SQL 的变量表名

php - MySQL MATCH 关键字开头的通配符

mysql - Laravel 5.2 中的批量插入优化