2014-12-19 4 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

Как вы можете видеть на экране выстрел "атр 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 свойства.

Вы можете, конечно, также сделать это в самом методе выборки, но это не так красиво.

Объект будет продолжать оказывать, как {} в случае, если вы не извлечь или преобразовать объект в то, что может быть сериализации в допустимом формате JSON (экземпляр Hal ресурса или сбора, а (JSON) строка или JsonSerializable) ,

 Смежные вопросы

  • Нет связанных вопросов^_^