我该如何重写这段代码以获取表中最后插入的记录?
$repository = $entityManager->getRepository('AdminBundle:MyTable');
$product = $repository->find($id);
我尝试了类似的东西
$repository->findBy(array('id','DESC')->setMaxResults(1);
但对我来说没有起作用。
我该如何重写这段代码以获取表中最后插入的记录?
$repository = $entityManager->getRepository('AdminBundle:MyTable');
$product = $repository->find($id);
我尝试了类似的东西
$repository->findBy(array('id','DESC')->setMaxResults(1);
但对我来说没有起作用。
通过使用带有 order by、limit 和 offset 参数的 findBy()
,您可以获取最新的记录。
$results = $repository->findBy(array(),array('id'=>'DESC'),1,0);
请注意,它将作为对象数组返回结果集,因此您可以从结果中获取单个对象,例如$results[0]
与其在需要时直接篡改代码,您也可以创建一个存储库方法,并在必要时调用它。
/**
* Repository method for finding the newest inserted
* entry inside the database. Will return the latest
* entry when one is existent, otherwise will return
* null.
*
* @return MyTable|null
*/
public function findLastInserted()
{
return $this
->createQueryBuilder("e")
->orderBy("id", "DESC")
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();
}
参考文献: https://symfony.com/doc/current/doctrine.html#querying-for-objects-the-repository
id
为e.id
似乎是必要的。 - Baudev在寻找一个解决方案之后,我决定自己尝试一下。我认为这种方式简洁明了很多:
$myRepository->findOneBy([], ['id' => 'DESC']);
$repository = $entityManager->getRepository('AdminBundle:MyTable');
$repository->setMaxResults(1)->orderBy('id', 'DESC');
$results = $repository->getQuery()->getSingleResult();
public function getLastRow(): ?YourEntity
{
return $this->findOneBy([], ['id' => 'DESC']);
}
public function getLastId(): int
{
$lastRow = $this->getLastRow();
return $lastRow ? $lastRow->getId() : 0;
}
通过获取插入对象的id,您可以进行收集。
$em->persist($entity);
$em->flush();
$entity->getId();
或者
$entitymanager->getRepository("entity")->findBy([],["id"=>desc])->getId();
'id'=>'DESC'
,请查看更新的答案。 - M Khalid Junaid$results = $repository->findBy(array(),array('id'=>'DESC'),1,0);
来反转它。 - Steven Rosato