Как настроить сущности в zf2 для однонаправленного отображения доктрин ManyToOne

У меня возникают проблемы при разработке формы в zf2 с использованием доктрины однонаправленных отношений ManyToOne. Мои сущности выглядят так:

namespace AdminMyPages\Entity;

class MyPageItem
{
// ...

/**
* @ORM\ManyToOne(targetEntity="MyMessage")
* @ORM\JoinColumn(name="myMessageID", referencedColumnName="myMessageID")
**/
private $myMessage;

// ...

/**
* Allow null to remove association
*
* @param Collection $myMessage
*/
public function setMyMessage(Collection $myMessage = null)
{
$this->myMessage = $myMessage;
}

/**
* @return myMessage
*/
public function getMyMessage()
{
return $this->myMessage;
}

}

class MyMessage
{
// ...
}

Набор полей для MyPageItemFieldset выглядит так:

namespace AdminMyPages\Form;

class MyPageItemFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('mypage-item-fieldset');

$this->setHydrator(new DoctrineHydrator($objectManager, 'AdminMyPages\Entity\MyPageItem'))
->setObject(new MyPageItem());

// ...

$myMessageFieldset = new MyMessageFieldset($objectManager);
$this->add(array(
'type'    => 'Zend\Form\Element\Collection',
'name'    => 'myMessage',
'options' => array(
'count'           => 1,
'target_element' => $myMessageFieldset
)
));

}

public function getInputFilterSpecification()
{

// ...

return array(
'myMessage' => array(
'required' => false
),
);

}

}

С помощью этой конфигурации я могу «получить» данные из MyMessage через getMyMessage()Я знаю, что таблицы были объединены. Однако, когда я пытаюсь связать сущность в форме, я получаю ошибку:

Файл:

C:\xampp\htdocs\GetOut\vendor\zendframework\zendframework\library\Zend\Form\Element\Collection.php:167

Сообщение:

Zend\Form\Element\Collection::setObject expects an array or Traversable object argument; received "DoctrineORMModule\Proxy\__CG__\AdminMyPages\Entity\MyMessage"

Трассировки стека:

#0  ...  Zend\Form\Element\Collection->setObject(Object(DoctrineORMModule\Proxy\__CG__\AdminMyPages\Entity\MyMessage))
...

Одна мысль, которая у меня есть, заключается в том, что, поскольку отношения ManyToOne будут давать только одно совпадение, MyMessage fieldset вряд ли является коллекцией — это всего лишь один элемент — так Zend\Form\Element\Collection не может быть правильным элементом формы для использования. Но если это не коллекция, что это?

0

Решение

Вы совершенно правы. Ваше сообщение не должно быть Collection, Это должно быть просто MyMessage,

Вы определили ManyToOne между MyPageItem а также MyMessage Это означает, что один элемент страницы имеет одно сообщение, а сообщение содержит много элементов страницы. Но поскольку это однонаправленные отношения, последняя часть никогда не определяется.

Поэтому сеттер должен выглядеть так:

/**
* @param MyMessage $myMessage
*/
public function setMyMessage(MyMessage $myMessage = null)
{
$this->myMessage = $myMessage;
}

И вы также должны изменить определение поля формы на один MyMessage вещь.

1

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

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

По вопросам рекламы [email protected]