我认为我目前的问题很容易描述。
我有一个symfony2项目,其中doctrine访问mysql数据库。 现在,多个(多个)用户可以同时访问此页面。
现在,我的问题如下: 用户可以单击按钮将自己标记为条目的参与者。 一个条目最多可以包含允许的参与者。
例如为: 进入A,最大users = 3< -----用户A,B,C和D查看入口A.
现在,A通过单击Ajax按钮将自己标记为参与者。 B做同样的事情(不是同时 - >没问题)。
现在C和D争夺ENTRY A中的最后一个空位。 两者同时点击按钮。
现在可能发生C和D都可以加入此条目,即使最大值。 3的用户被删除。
如果用户点击Ajax按钮,则会发送ajax调用。 在服务器端,在ajax处理程序中,我的symfony2代码将使用doctrine来访问db。 它只是从数据库请求输入并检查是否已达到最大用户数。 如果不是,则用户被保存/标记为条目的参与者。
但这是不允许的。我想避免2个用户可以同时点击按钮加入条目。 在这种状态下,最大条目中的用户定义为3,此条目的参与者数量为4.这不是此功能的目标。
你能解释一下如何解决这个问题吗? 我需要表锁定吗?
如果不清楚问题是什么,那就问问吧。 我期待着答案,我很感激每一个提示。
最佳钛
答案 0 :(得分:0)
看到你正在使用MySQL,你可以使用
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_get-lock http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_release-lock
如何对代码进行编码取决于您,但它可用于缓解您所拥有的并发问题。
答案 1 :(得分:0)
查看doctrine doc http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html
上的事务和并发