2011-03-18 5 views
4

로 데이터를 가져 오는, 나는 데이터베이스심포니/교리는 : 심포니에서 객체

$q = Doctrine_Query::create() 
     ->from('User u') 
     ->where('u.username = ?', $username) 
     ->andWhere('u.password = ?', $password); 
$user = $q->fetchArray(); 

문제는 결과가 배열에 저장되어 있다는 것이다에게 쿼리 Doctrine_Query를 사용합니다. 배열 대신 객체를 가져올 수있는 방법이 있습니까?

또한 Symfony에서 데이터베이스를 쿼리 할 수있는 다른 방법이 있습니까? 아니면 Doctrine의 함수를 사용해야합니까?

+0

질문의 목적은 무엇입니까? 그러나 Doctrine에서는 구현 된 반복자 인터페이스가 있습니다. foreach를 통해 갈 수 있습니다. – Stony

답변

11

당신은

$q->fetchOne() 

객체의 그룹을 가져 오기 위해 하나 개의 레코드 (객체) 또는

$q->excute() 

를 가져 오는 데 사용할 수 있습니다.

저는 심포니를 사용할 때 거의 모든 것을 개인적으로 사용합니다. 이 경우 배열을 가져와야 할 경우가 있습니다. 중첩 된 집합이있는 경우 HYDRATE_ARRAY 또는 HYDRATE_ARRAY_HIERARCHY와 같은 데이터 수화를 사용할 수 있습니다.

원시 쿼리로

체크 아웃이 : raw sql in doctrine

편집 : 난 그냥 원시 쿼리 나 자신을 사용했다

하고 심포니에서 작동하는 방법이다 :

$pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh(); 
$query = "SELECT name, slug, 
    (3959 * acos(cos(radians(:lat)) * cos(radians(lat)) 
     * cos(radians(lng) - radians(:lng)) + sin(radians(:lat)) 
     * sin(radians(lat)))) AS distance 
    FROM rss_city WHERE (lat <> :lat and lng <> :lng)HAVING distance IS NOT NULL 
    ORDER BY distance LIMIT 5"; 
$stmt = $pdo->prepare($query); 
$params = array(
    "lat" => $lat, 
    "lng" => $lng 
); 
$stmt->execute($params); 
$results = $stmt->fetchAll(); 

이를 쿼리는 위도/경도 좌표에 가장 가까운 5 개의 도시 배열을 반환합니다. 내 생각에 그건 자명하다.

+0

감사합니다, 이것이 내가 필요한 것입니다. – Rain

+0

당신을 진심으로 환영합니다. –