2013-11-09 50 views
0

我有一個問題,我恐怕我失去了一些愚蠢的東西。但我正在努力尋找類似的問題,看看我失蹤了。學說父母,孩子的關係水化

無論如何,我有一個產品實體:

<?php 

class Product { 
    private $productid; 
    private $name; 

    /** 
    * @ORM\ManyToOne(targetEntity="MyNamespace\CategoryBundle\Entity\Category") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="categoryid", referencedColumnName="categoryid") 
    * }) 
    */ 
    private $category; 

    public function getCategoryPath() 
    { 
     $category = $this->category; 
     $items = array($category); 

     var_dump($category->getParent()); 
     while (null !== $category->getParent()) { 
      $category = $category->getParent(); 

      $items[] = $category; 
     } 

     return $items; 
    } 

} 

class Category { 
    private $categoryid; 
    private $name; 

    /** 
    * @var \Category 
    * 
    * @ORM\ManyToOne(targetEntity="MyNamespace\CategoryBundle\Entity\Category") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="parentid", referencedColumnName="categoryid") 
    * }) 
    */ 
    private $parent; 

    public function getParent() 
    { 
     return $this->parent; 
    } 
} 

?> 

我嘗試:

<?php 
$product = $entityManager->find('MyNamespaceProductBundle:Product', 10); 
$categories = $product->getCategoryPath(); 
?> 

的問題是,該類別陣列只包含直接鏈接的類別。它看起來似乎沒有提供父項,所以$ category-> getParent()將始終返回null,如果我查看mysql-general日誌,我沒有看到爲父類別引發的查詢。

我在做什麼錯?

+0

剛剛對您的示例進行了測試。這工作非常好。不知道你的數據是怎麼樣的,在這個特定情況下是否有對父類別的引用?也不知道爲什麼在Product類中添加categoryPath? – busypeoples

回答

0

我的猜測是你應該調用getCategoryPath()這個Category類裏面的類getCategoryid(),並且只返回categoryid的值。然後:

<?php 

$product = $entityManager->find('MyNamespaceProductBundle:Product', 10); 
$category = $product->getCategoryid(); 
$categoryProducts = $entityManager->find('MyNamespaceCategoryBundle:Product',array('categoryid' => '$category')); 

?> 
+0

對不起,這個方法已經在實體中,但我忘了複製它。謝謝。 –

+0

好的。讓我們看看它是否對你有所幫助。 – Manolo

+0

@ManoloSalsas在這個例子中,他返回一個數組而不是一個id,他將所有的id添加到最後一個父節點。但我同意Category類應該處理這個問題,而不是Product類。 – busypeoples