ApiGility — возвращение пользовательских коллекций

Моя цель — вернуть пользовательскую коллекцию для findAll() запрос и доставить его в HAL, чтобы убедиться, что его _links отформатированы правильно. Первоначально я думал, что просто сделаю это программно, однако это неправильный способ сделать это.

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужны данные не из одной таблицы, а из нескольких таблиц (объединений), и я не могу понять, как это сделать правильно.

У меня есть следующие лица:

Каменное существо: Стандартная таблица с объединением некоторых атрибутов, которые я хотел бы вернуть в своем фиде

/**
* @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

Как видно из скриншота, «атрибут» и другие подобные поля не заполняются …

Поэтому мой вопрос заключается в следующем: как мне обеспечить заполнение таблиц соединений в ленте?

2

Решение

Вам нужно будет получить вступить в ваши ассоциации. Вы можете прочитать об этом в документации Doctrine 2 Вот.

В вашем случае это будет выглядеть следующим образом:

$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).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector