0

以下は 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 には、SQL クエリを書く以外に RAND() のようなものはないようです。

4

2 に答える 2

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

別の方法があると思いましたが、発見できません。

于 2012-04-10T17:40:52.167 に答える