Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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 Laravel 5.1什么&x27;DB builder中的lockForUpdate和Eloquent的区别是什么?_Php_Mysql_Laravel 5 - Fatal编程技术网

Php Laravel 5.1什么&x27;DB builder中的lockForUpdate和Eloquent的区别是什么?

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

在Eloquent上使用lockForUpdate似乎并不总是有效

       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);