如何通过实体管理器获取上一个和下一个实体

Muz*_*Ali 4 doctrine symfony doctrine-orm

这就是我能够使用它的id获取用户实体的方式:

$userEntity = $em->getRepository('ModelBundle:User')->find($userId);
Run Code Online (Sandbox Code Playgroud)

有没有办法根据这个$ userEntity获取上一个和下一个实体?

例如:我获取$ userEntity并且它的id为100,现在我想要获取前一个实体,无论它的id为99,80,70,无论它是什么!与下一个实体的情况相同..

我已经可以使用一些PHP黑客获取下一个和上一个,但是我正在寻找更好的方法..

编辑: 只是为了澄清我正在寻找面向对象的方法,如下所示:

$userEntity = $em->getRepository('ModelBundle:User')->find($userId);
$previousUserEntity = $userEntity->previous(); //example
$previousUserEntity = $userEntity->next(); //example
Run Code Online (Sandbox Code Playgroud)

我知道userEntity不包含任何方法,如previous()和next(),它只是一个例子,如果存在任何类似的东西,可以帮助直接以面向对象的方式获得下一个和前一个实体!

Den*_*mov 6

将此funstion添加到您的存储库类

public function previous(User $user)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT u
            FROM ModelBundle:User u
            WHERE u.id = (SELECT MAX(us.id) FROM ModelBundle:User us WHERE us.id < :id )'
        )
        ->setParameter(':id', $user->getId())
        ->getOneOrNullResult();
}

public function next(User $user)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT u
            FROM ModelBundle:User u
            WHERE u.id = (SELECT MIN(us.id) FROM ModelBundle:User us WHERE us.id > :id )'
        )
        ->setParameter(':id', $user->getId())
        ->getOneOrNullResult();
}
Run Code Online (Sandbox Code Playgroud)

  • @MuzafarAli OO解决方案是什么意思?这个解决方案使用dql,所以它是通过doctrine2 (2认同)