【发布时间】:2016-04-13 10:21:44
【问题描述】:
我有一个实体 Key(不是真名,我知道 Key 是被禁止的),我需要在循环中获取一个带有 state=1 的 Key,并将其更改为 state=2。这是我的脚本:
/* Each object */
for ($i=0; $i < $order->getQuantity(); $i++) {
/* get available key */
$key = $this->getDoctrine()->getRepository('AppBundle:Key')->findOneBy(array('state' => 1));
$key->setState(2); // On la rend active
$this->_em()->persist($key);
}
}
我的问题是这一行:$key = $this->getDoctrine()->getRepository('AppBundle:Key')->findOneBy(array('state' => 1));
Doctrine 总是得到与state=1 相同的第一个键。如果我直接在循环中刷新没关系,但我可以有一个非常大的循环,我不想刷新 XXXX 次。
有没有办法不让已经持久化的实体?如果我还没有坚持,我怎么能对 Doctrine 说得到 Key with state=1 ONLY?
谢谢!
【问题讨论】:
-
也许我在您的示例中遗漏了一些上下文,但是为什么您要在循环中一个接一个地获取记录,而不是使用
->findBy(['state' => 1])返回所有记录?实际上,如果您只想更新一堆记录,您可以创建一个 DQL/SQL 更新查询,可选择将其放入自定义KeyRepository。
标签: php symfony doctrine-orm doctrine