我有一个函数可以执行2件事。
代码算法就是这样
public function doSomething($id = 0)
{
$em = $this->getEntityManagerFromSomewhere();
$service = $this->getSomeServiceFromSomewhere();
$repo = $em->getRepository(Item::class);
$conn = $em->getConnection();
$conn->beginTransaction();
if ($id) {
$item = new Item();
} else {
$item = $repo->find($id);
}
$em->persist($item);
$em->flush();
$items = $repo->getAllItems();
// changes are saved to the database
$service->rearrangeItems($items);
$conn->commit();
}
现在我遇到的问题是,如果它是一个新商品,则当我们尝试获取所有商品时,出于某种奇怪的原因,该新商品不包括在内。
我自己尝试过一些东西,对我有用的是插入
$em->clear(); // after flush
我不确定这是否是解决此问题的最佳方法,或者我是否滥用此功能。不过,当我进行测试时,它仍然有效。
答案 0 :(得分:0)
public function doSomething($id = 0)
$ id默认为0,实际上,您每次都在创建项目。
if ($id) {
$item = new Item();
$em->persist($item);
} else {
$item = $repo->find($id);
}
此外,如果您不更新或创建新项目,则无需保留。
或者我的理解方式。
if($id)
{
$item = $em->getRepository(Item::class)->find($id)
}
else
{
$item = new Item();
$em->persist($item);
}
$em->flush();