如何获取相关表的对象

时间:2014-02-19 19:17:06

标签: php symfony doctrine

我使用DQL的查询是:

$query = $this->_em->createQuery(

    'SELECT v, a
    FROM MyBundle:Products v
    JOIN v.category a WITH a.id = :id
    WHERE v.main = 1'
)
->setMaxResults(1)
->setParameters(array('id' => $id));



$result = $query->getOneOrNullResult();

var_dump($result->getCategory()->getId());

请,sombody可以解释一下,为什么var_dump什么都不返回(白页)?我花了很多时间来解决这个问题,但我不明白,这种行为的原因是什么。

我知道,我只能选择类别表的id我需要类别的孔对象。上面的查询只是示例,不返回任何ID。

或者是否有另一种方法来获取相关表的对象?

2 个答案:

答案 0 :(得分:0)

首先,实体的名称是Products而不是Product吗?

其次,检查是否为category正确设置了逆映射。

我刚尝试了一个使用完全相同的用例的简单示例,它运行正常。

$em = $this->get('doctrine')->getEntityManager();
$query = $em->createQuery(
        'SELECT p, c
        FROM TestTestBundle:P p
        JOIN p.children c WITH c.id = :id
        WHERE p.main = 1'
    )
    ->setMaxResults(1)
    ->setParameters(array('id' => $id));

if (null !== $result = $query->getOneOrNullResult()) {
    foreach ($result->getChildren() as $child) {
        var_dump($child->getTitle());
    }
}

按照NHG的说法并启用错误报告,这样我们就可以得到一些错误。

这是使用的两个实体的ORM映射。

父母

class P
{
    /**
     * @ORM\OneToMany(targetEntity="Test\TestBundle\Entity\C", mappedBy="parent")
     */
    private $children;

    public function getChildren()
    {
        return $this->children;
    }

孩子

class C
{
    /**
     * @ORM\ManyToOne(targetEntity="Test\TestBundle\Entity\P", inversedBy="children")
     */
    private $parent;

答案 1 :(得分:0)

感谢您的所有回复。我发现了问题,这是在我的转储中。但是,以防万一,当我倾倒大对象时,我的实体与关系一样。 Skript停在它上面,或者什么东西,永远不会继续。所以当我删除这些转储时,它可以正常工作。

也许,用于转储大型对象的可行解决方案可以在Enterx的评论中,但我无法尝试,因为我的应用程序位于远程服务器上,我无权访问php.ini。