以下将返回带有 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 查询。