Doctrine orm 使用CI2+从数据库/实体获取随机记录;教义2

Doctrine orm 使用CI2+从数据库/实体获取随机记录;教义2,doctrine-orm,codeigniter-2,Doctrine Orm,Codeigniter 2,以下内容将返回带有条令的随机记录: $name = Doctrine::getTable('nametable') ->createQuery() ->select('name') ->orderBy('RAND()') ->fetchOne(); 但我正在运行CI2+Doctrine2,因此它无法调用未定义的方法Doctrine::getTable() 我试过了 $data = $this->doctrine->em->getRepository('

以下内容将返回带有条令的随机记录:

$name = Doctrine::getTable('nametable')
->createQuery()
->select('name')
->orderBy('RAND()')
->fetchOne();
但我正在运行CI2+Doctrine2,因此它无法调用未定义的方法Doctrine::getTable()

我试过了

$data = $this->doctrine->em->getRepository('ORM\Project\Names')
                 ->orderBy('RAND()')
                 ->fetchOne();
但这也不起作用:
Uncaught异常“BadMethodCallException”,带有消息“Undefined method”orderBy。方法名称必须以findBy或findOneBy!开头

也许findOneBy是我想要的,但它需要一个数组

在这个设置中,有没有一种优雅的方法来获取随机记录

编辑:

$data = $this->doctrine->em->getRepository('ORM\Project\Names')->findOneBy(array(
    'field' => 'ASC or DESC'
));

这就是我想到的:

$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Femalenames u");
$result = $query->getSingleResult();
$highval = $result[1];
$random_name = rand(1,$highval);
$name = $this->doctrine->em->find('ORM\Dynasties2\Femalenames', $random_name);
$mother_name = $name->getName();
$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Femalenames u");
$result = $query->getSingleResult();
$highval = $result[1];
$random_name = rand(1,$highval);
$name = $this->doctrine->em->find('ORM\Dynasties2\Femalenames', $random_name);
$mother_name = $name->getName();
肯定有更干净的方法吗???显然,在CI2/Doctrine2中没有RAND()这样的东西,除了编写一个SQL查询之外。

“orderBy”在尝试访问存储库时不起作用。在这种情况下,您必须使用“createQuery”或查询生成器“createQueryBuilder”进行查询

另一种方式是:

$data = $this->doctrine->em->getRepository('ORM\Project\Names')->findOneBy(array(
    'field' => 'ASC or DESC'
));
在这里,您可以测试RAND而不是ASC或DESC,但我认为最好的方法是进行查询


您可以在存储库中定义一个函数,并进行查询,使所有查询都在回购协议中,而不是在控制器中,那么您的第一个示例看起来不错。

这就是我想到的:

$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Femalenames u");
$result = $query->getSingleResult();
$highval = $result[1];
$random_name = rand(1,$highval);
$name = $this->doctrine->em->find('ORM\Dynasties2\Femalenames', $random_name);
$mother_name = $name->getName();
$query = $this->doctrine->em->createQuery("select max(u.id) from ORM\Dynasties2\Femalenames u");
$result = $query->getSingleResult();
$highval = $result[1];
$random_name = rand(1,$highval);
$name = $this->doctrine->em->find('ORM\Dynasties2\Femalenames', $random_name);
$mother_name = $name->getName();

我以为还有另一种方法,但无法发现。

是的,这就是处理它的方法。您还可以使用如下函数: