我是Symfony的新手,並且在Symfony網站上閱讀這本書,確切地說是this部分。Symfony加入相關記錄
在第一個例子以下函數用於連接兩個表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();
的問題是,如果我離開它,因爲它是正常工作IF產品有任何指定的範疇,但如果產品沒有任何分配的類別i得到錯誤
Call to a member function getCategory() on a non-object
如果我刪除代碼$category = $product->getCategory();
,並訪問其中沒有任何類別的分配,然後我得到我應該404
我真的很感激,如果有人可以解釋t的誤差產品我爲什麼會這樣。
我可以說,在實體是雙向連接的時候,select和p都沒有任何意義。我會推薦檢查'$ product'是否爲空,因爲如果它找不到任何記錄或者它發現多條記錄'getSingleResult'會拋出異常並且函數將返回'null';基於你的錯誤出現。 – Javad 2014-09-02 14:36:29
謝謝,但我想知道爲什麼使用此代碼'$ category = $ product-> getCategory();'當'join'已經獲取類別 – Baig 2014-09-02 14:43:21
因爲該函數返回一個產品。你還期望如何獲得這個類別?使用查詢加入類別的目的是避免延遲加載,當需要該類別時需要額外的sql語句。 – Cerad 2014-09-02 14:46:37