2013-11-04 1 views
3

내가 '포스트'는 원시 쿼리를 사용하여 테이블의 일부 필드를 표시하기 위해 노력하고있어 : 나는 오류가있어심포니 교리 : fetchAll()에 foreach 루프에서 필드 값을 얻을

$connection = $em->getConnection(); 
    $statement = $connection->prepare("SELECT * FROM Post WHERE category_id = 1"); 
    $statement->execute(); 
    $posts = $statement->fetchAll(); 

... 

foreach($posts as $post) { 
     $xml .= $post->getId(); 
     $xml .= $post->getTitle(); 
     $xml .= $post->getContent(); 
    } 

" FatalErrorException : 오류 : 구성원 함수가 아닌 개체의 getId() 호출 ... " 이러한 게터는 모두 내 게시물 엔티티에 있습니다. 내가 뭘 잘못하고 있는지에 대한 제안이 있니?

[편집]

$em = $this->getDoctrine()->getManager(); 

$post_repository = $em->getRepository('MyBundle:Post'); 
$posts = $post_repository->findBy(array('category_id' => 1)); 

foreach($posts as $post) { 
     $xml .= $post->getTitle(); 
    } 

나에게 "인식 할 수없는 필드 : CATEGORY_ID"반환합니다.

내 포스트 클래스 : 여기에 직접 연결을

class Post 
{ 
/** 
* @ORM\ManyToOne(targetEntity="MyBundle\Entity\Category", inversedBy="post") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="category_id", referencedColumnName="id") 
* }) 
*/ 
private $category; 
/** 
* Set category 
* 
@param MyBundle\Entity\Category $category 
*/ 
public function setCategory(\MyBundle\Entity\Category $category) 
{ 
    $this->category = $category; 
} 
/** 
* Get category 
* 
@return MyBundle\Entity\Category 
*/ 
public function getCategory() 
{ 
    return $this->category; 
} 


/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="title", type="string", length=255) 
*/ 
private $title; 

.... 
+1

은 아마도 실제 SQL을 (또는 예정) 당신이 준 코드보다 더 복잡한을 높은 수준의 메커니즘은 불충분하다. 간단한 저장소 -> findBy()이 SQL에 충분합니다 – redbirdo

+0

왜 간단한 경우에 원시 sql을 사용합니까? –

답변

1

를 사용하는 이유는 무엇입니까? "posts"클래스에 엔터티 저장소를 사용하는 것을 고려해야합니다. 예를 들어 :

$posts = $em->getRepository('YourBundle:Post')->findBy(array('category_id' => 1)); 

이 작동합니다, 단지 적절한 번들 클래스 이름으로 YourBundle:Post를 교체합니다. category_id과 동일하게, 클래스 속성 또는 매핑 이름 인 경우 구현 없이는 추측 할 수 없습니다.

주제에 대한 지식을 향상 시키려면 the official Doctrine documentation에 대한 자세한 내용을 읽어 보시기 바랍니다.

+0

이것은 실제로 더 좋을 수도 있습니다! 이제 "Unrecognized field : category_id"오류가 있습니다. 이 필드는 내 Category 클래스 (다 대일)를 참조하는 외래 키입니다. –

+0

그런 다음 원래 게시물에 "게시"클래스의 복사/붙여 넣기를 정적 마법사로 추가 할 수 있습니까? –

+0

예. 나는 이미 몇 분 전에 그것을했다 :) –

1

Doctrine의 DBAL 레이어를 사용하여 원시 쿼리를 실행하면 결과가 엔티티가 아닌 값에 매핑 된 필드 이름의 배열로 반환됩니다.

따라서이 같은 필요 : 원시 쿼리는 거의 때 사용하지 않는 심포니/교리와 마찬가지로,

foreach($posts as $post) { 
    $xml .= $post['id']; 
    $xml .= $post['title']; 
    $xml .= $post['content'; 
}