以下内容将返回带有Doctrine的随机记录:
$name = Doctrine::getTable('nametable')
->createQuery()
->select('name')
->orderBy('RAND()')
->fetchOne();
但是我正在运行CI2 + Doctrine2,所以它不起作用Call to undefined method Doctrine::getTable()
我试过
$data = $this->doctrine->em->getRepository('ORM\Project\Names')
->orderBy('RAND()')
->fetchOne();
但这也不起作用:Uncaught exception 'BadMethodCallException' with message 'Undefined method 'orderBy'. The method name must start with either findBy or findOneBy!'
也许findOneBy是我想要的,但它需要一个数组。
在此设置中是否有一种优雅的方式来获取随机记录?
修改
这就是我想出来的:
$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查询。
答案 0 :(得分:1)
“orderBy”无效。在这种情况下,您必须使用“createQuery”或查询构建器“createQueryBuilder”进行查询。
另一种方式是:
$data = $this->doctrine->em->getRepository('ORM\Project\Names')->findOneBy(array(
'field' => 'ASC or DESC'
));
在这里你可以测试RAND而不是ASC或DESC,但我认为最好的方法是进行查询。
您可以在存储库中定义一个函数,并在您的仓库中查询所有查询,而不是在控制器中,然后您的第一个示例看起来不错。
答案 1 :(得分:0)
这就是我想出来的:
$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();
我认为还有另一种方法,但无法发现它。