我想在事务中锁定一个表。像这样:
DB::transaction(function (){
DB::statement('LOCK TABLES important_table WRITE');
//....
});
然而,这条线 DB::statement('LOCK TABLES important_table WRITE');
总是触发以下错误:
sqlstate[hy000]:常规错误:当其他未缓冲查询处于活动状态时,2014无法执行查询。考虑使用pdostatement::fetchall()。或者,如果您的代码只在mysql上运行,您可以通过设置pdo::mysql\u attr\u use\u buffered\u query属性来启用查询缓冲(sql:锁定表(officeseal写入)
我怎样才能把table锁在拉威尔?
3条答案
按热度按时间zzzyeukh1#
db::unprepared('lock tables important_table write');这个对我有用
anhgbhbe2#
您可以像这样在laravel中锁定表:
DB::raw('LOCK TABLES important_table WRITE')
;aurhwmvo3#
正如其他用户在评论中指出的那样,我并不认为表锁绝对是唯一的出路。然而,如果你坚持,你可以使用拉威尔的悲观锁定。也就是说,
sharedLock()
以及lockForUpdate()
方法,如文档中所述。您会注意到文档中的示例没有使用雄辩的,而是依赖于查询生成器。然而,这个问答似乎表明,它可以做到与雄辩太。
这篇文章比较了laravel中悲观锁和乐观锁的实现,可能也值得一读。