Symfony 2 - 从 table 中获取最后插入的行

Symfony 2 - fetch the last inserted row from table

如何重写此代码才能从 table 中获取最后插入的记录?

$repository = $entityManager->getRepository('AdminBundle:MyTable');
$product = $repository->find($id);

我试过

$repository->findBy(array('id','DESC')->setMaxResults(1);

但这对我不起作用。

请试试下面的

$repository = $entityManager->getRepository('AdminBundle:MyTable');
$repository->setMaxResults(1)->orderBy('id', 'DESC');
$results = $repository->getQuery()->getSingleResult();

参考: https://undebugable.wordpress.com/2016/01/27/symfony2-querybuilder-find-first-and-find-last-record-in-table/

您可以使用 findBy() 和 order by、limit 和 offset 参数来获取最新记录

$results = $repository->findBy(array(),array('id'=>'DESC'),1,0);
  • 第一个参数用于过滤条件
  • 第二个参数按条件排序
  • 第三个参数用于限制
  • 第四个参数设置偏移量

请注意,它将 return 您的结果集设置为对象数组,因此您可以从结果中获取单个对象 $results[0]

FindBy() Examples

除了在你想使用它的地方修改代码,你还可以创建一个存储库方法并在需要时调用它。

/**
 * 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

在找了一个之后我决定自己试一试,我觉得它不那么冗长:

$myRepository->findOneBy([], ['id' => 'DESC']);

您可以将这些函数添加到您的存储库中:

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();