2012-04-09 4 views
0

를 사용하여 데이터베이스/단체에서 임의의 레코드를 가져 교리와 임의의 레코드를 반환 다음CI2 + Doctrine2

$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

이입니다.

+0

네, 그게 그걸 다룰 수있는 교리입니다. 다음과 같은 함수를 사용할 수도 있습니다 : https://gist.github.com/Thinkscape/124d658e4076421c0516 –

1

리포지토리에 액세스하려고하면 "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(); 

내가 다른 방법이 당연하다고 생각하지만, 그것을 검색 할 수 없습니다 : 내가 가지고 올 한 내용