Php Laravel 5.1什么&x27;DB builder中的lockForUpdate和Eloquent的区别是什么?
在Eloquent上使用lockForUpdate似乎并不总是有效Php Laravel 5.1什么&x27;DB builder中的lockForUpdate和Eloquent的区别是什么?,php,mysql,laravel-5,Php,Mysql,Laravel 5,在Eloquent上使用lockForUpdate似乎并不总是有效 DB::beginTransaction(); User::find(1)->lockForUpdate(); ... (doing some logic) DB::commit(); 但是使用 DB::table('users')->where('id', '=', $userId)->lockForUpdate() 总是有用的。这两个lockFor
DB::beginTransaction();
User::find(1)->lockForUpdate();
... (doing some logic)
DB::commit();
但是使用
DB::table('users')->where('id', '=', $userId)->lockForUpdate()
总是有用的。这两个lockForUpdate()之间有什么区别
- Laravel版本:5.1
- PHP版本:5.7
- 数据库驱动程序&版本:MySQL 14.14
find()
将返回模型而不是查询生成器
lockForUpdate()
是一个来自查询生成器的方法看起来像是一个有趣的问题。然而,你所说的有效和无效到底是什么意思?请解释预期/意外的行为和错误消息(如果有)。@alariva,在我的例子中,我试图由每个用户在用户配置文件表中创建一个唯一的条目。如果用户意外地单击了两次“保存”按钮(这并没有阻止用户触发多次单击),它将使用user::find(1)->lockForUpdate();,在用户配置文件表中创建两行;。所以我认为它没有正确锁定。这有什么意义吗?现在我明白了,但它确实与锁定行无关。另一方面,只处理users表并不能避免其他表上的相同问题。我自己有个好消息,你至少可以为用户
表做点什么。因此,你可以做的是在迁移文件中创建用户
表的电子邮件或用户名字段。在这里
User::lockForUpdate()->find(1);