【发布时间】:2015-04-11 13:59:41
【问题描述】:
我正在清理其他人编写的一些旧代码,因为我们遇到了超时问题,尤其是那些正在突破我们系统极限的客户。
我知道这是一种反模式,并且代码中充满了这种变化:
$userIDs = [100,101,107,208, ...]; // tons of users, but not all users in a company.
$companyID = 4356;
foreach ($userIDs as $id) {
$user = $em->getRepository('AdminBundle:Users')
->getUser($id, $companyId);
$user->removeGroup($group);
$em->persist($user);
$em->flush();
}
它只会导致对每个用户的查询,这会使服务器超时(分析器显示数百个查询)。增加超时确实有效,但该解决方案不能很好地扩展......并且导致我喝咖啡的时间比健康的要多。
将其重写为单个更新查询的正确、高效、symfony-ey 方式是什么?
【问题讨论】:
-
请告诉我用户id和公司id是怎么设置的。
-
来自会话数据和请求参数。我仍在尝试破译其中的大部分内容,但它是一个执行“管理面板”的控制器——将权限、用户和组耦合在一起。 “组”页面上的表单有一堆复选框和下拉菜单,您可以在其中将公司中的任意数量的用户添加到该组,并设置各种操作的权限。问题是,有些公司拥有数百个用户和数百个组。
标签: php mysql symfony doctrine-orm anti-patterns