Php Symfony加入相关记录
我是Symfony的新手,正在浏览Symfony网站上的这本书,确切地说是一节 在第一个示例中,以下函数用于连接两个表Php Symfony加入相关记录,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我是Symfony的新手,正在浏览Symfony网站上的这本书,确切地说是一节 在第一个示例中,以下函数用于连接两个表product和category,这非常有意义 public function findOneByIdJoinedToCategory($id) { $query = $this->getEntityManager() ->createQuery( 'SELECT p, c FROM AcmeStoreBundle:Pr
product
和category
,这非常有意义
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()代码>是指如果我保持原样,它可以正常工作如果产品有任何指定类别,但是如果产品没有任何指定类别,我会得到错误
对非对象调用成员函数getCategory()
如果我删除代码$category=$product->getCategory()
并访问未分配类别的产品,然后我得到一个错误,我应该404
如果有人能向我解释为什么会发生这种情况,我将不胜感激。行$category=$product->getCategory();如果您不需要此变量$category,则无效。
如果您没有加入查询,则此行$category=$product->getCategory();将对数据库进行另一个查询以获取类别
对于细枝{{product.category.name},如果没有连接,也没有关系,则该类别将为空,与$category=$product->getCategory()无关;代码。我可以说,当实体双向连接时,select中的p
和c
都没有意义。我建议检查$product
是否为空,因为如果它找不到任何记录或找到多个记录getSingleResult
将抛出异常,函数将返回null
;在此基础上,会出现错误。谢谢,但我想知道为什么要使用此代码$category=$product->getCategory()
由于函数返回一个产品,join
已经在获取类别时。您还希望如何获得该类别?使用查询加入类别的目的是避免延迟加载,当您需要类别时,这需要额外的sql语句。感谢@Cerad的解释,如果我不使用$category=$product->getCategory(),我正在尝试理解这个概念代码>我仍然可以通过{{product.category.name}访问类别名称,这让我感到困惑。问题不是第二个函数为什么存在,我想知道它为什么存在,我只是想了解为什么使用$category=$product->getCategory()代码>当我们已经可以通过连接访问类别名称时