Symfony加入相关记录

时间:2014-09-02 14:20:52

标签: php symfony doctrine-orm

我是Symfony的新手并浏览Symfony网站上的这本书,确切地说是this部分。

在第一个例子中,以下函数用于连接两个表productcategory,这是完全合理的

public function findOneByIdJoinedToCategory($id)
{
    $query = $this->getEntityManager()
        ->createQuery(
            'SELECT p, c FROM AcmeStoreBundle:Product p
            JOIN p.category c
            WHERE p.id = :id'
        )->setParameter('id', $id);

    try {
        return $query->getSingleResult();
    } catch (\Doctrine\ORM\NoResultException $e) {
        return null;
    }
}

我不理解的是第二个例子,

public function showAction($id)
{
    $product = $this->getDoctrine()
        ->getRepository('AcmeStoreBundle:Product')
        ->findOneByIdJoinedToCategory($id);

    $category = $product->getCategory();
}

当在第一个函数中加入两个表时,第二个函数中$category = $product->getCategory();的目的是什么?

我对此代码$category = $product->getCategory();的问题是,如果我将其保留,因为它可以正常工作 IF 产品具有任何已分配的类别,但如果产品没有任何分配类别我得到错误

Call to a member function getCategory() on a non-object

如果我删除代码$category = $product->getCategory();并访问未分配类别的产品,那么我会收到404

的错误

如果有人能向我解释为什么会发生这种情况,我将非常感激。

1 个答案:

答案 0 :(得分:1)

$ class = $ product-> getCategory();如果你不需要这个变量$ category,那就没用了。 如果你没有在查询中加入此行$ category = $ product-> getCategory();将对数据库进行另一次查询以获取类别。

对于twig {{product.category.name}},如果没有JOIN且没有关系,则该类别为nu​​ll,与$ category = $ product-> getCategory()无关;代码。