2014-12-19 76 views
2

我的目標是返回findAll()查詢的自定義集合,並將其交給HAL以確保其_links格式正確。我原本以爲我會以編程的方式做到這一點,但這似乎是做到這一點的錯誤方式。ApiGility - 返回自定義集合

我面臨的問題是我需要的數據不是來自單個表格,而是來自多個表格(連接),我無法解決如何正確執行此操作。

我有以下實體:

石實體:用加入一些,我想在我的飼料返回屬性標準表

/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToMany(targetEntity="Stone\Entity\StAttribute") 
    * @ORM\JoinTable(name="st_stone_attribute", 
    *  joinColumns={@ORM\JoinColumn(name="stone_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="attribute_id", referencedColumnName="id")} 
    *) 
    * 
    * @var Collection 
    * @access private 
    */ 
    private $attribute; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=50, nullable=false) 
    */ 
    private $name; 

etc... 

屬性的實體是一個標準表:

/** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=30, nullable=false) 
    */ 
    private $name; 

我的資源調用:

public function fetchAll($params = array()) 
    { 
     return $this->stoneMapper->fetchAll(); 
    } 

我的映射文件:

public function fetchAll() 
{ 
    $qb = $this->stoneRepository->createQueryBuilder('u') 
     ->where('u.state=:state') 
     ->setParameter('state' , 1); 

    $adapter = new DoctrineAdapter(new ORMPaginator($qb)); 
    $collection = new StoneCollection($adapter); 

    return $collection; 
} 

我收藏

use Zend\Paginator\Paginator; 

class StoneCollection extends Paginator 
{ 

} 

結果這裏的屏幕截圖:http://screencast.com/t/vgm34s92dsk2

你可以從屏幕上看到拍攝「attr ibute「和其他類似的領域沒有被填充...

所以我的問題是這樣的:我如何確保連接表填充飼料?

+0

嘿你有這個解決方案嗎? –

+0

@JimitShah我回答了這個問題。這可能對您有所幫助。 – Wilt

回答

0

您將需要獲取加入您的關聯。您可以在Doctrine 2文檔here中閱讀。

在你的情況下,它看起來如下:

$qb = $this->stoneRepository->createQueryBuilder('s') 
    ->addSelect('a') 
    ->leftJoin('s.attribute', 'a') 
    ->where('s.state = :state') 
    ->setParameter('state' , 1); 

這也將是必要要麼你StAttribute一水合在MetadataMap或有原本應該是實現提取StAttribute性質一些代碼。

你當然也可以在fetch方法本身做到這一點,但這並不是那麼漂亮。

對象將繼續呈現爲{}如果你不提取或將對象轉換爲的東西,可以被序列化到有效的JSON格式(一Hal資源或集合例如,(JSON)字符串或JsonSerializable) 。