3

我正在尝试使用原始查询显示表“发布”的某些字段:

$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()” 所有这些 getter 都在我的 Post 实体中。关于我做错了什么有什么建议吗?

[编辑]

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

返回我"Unrecognized field: 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;

....
4

2 回答 2

2

为什么在这里直接使用您的连接?您应该考虑为您的“帖子”类使用实体存储库。例如 :

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

这应该可以,只需用YourBundle:Post正确的包和类名替换。相同,category_id如果它是类属性或映射名称,如果没有您的实现,我无法猜测。

我建议您阅读更多有关Doctrine 官方文档的内容,以提高您对该主题的了解。

于 2013-11-04T11:13:19.333 回答
1

当您使用 Doctrine 的 DBAL 层执行原始查询时,结果返回为映射到值的字段名称数组,而不是实体。

因此,您需要这样的东西:

foreach($posts as $post) {
    $xml .= $post['id'];
    $xml .= $post['title'];
    $xml .= $post['content';
}
于 2013-11-04T11:15:20.390 回答