我有一个可以有 N 个“评论”的“记录”实体。
这是这两个实体的设置:
记录
<entity name="Application\Model\Record" table="record">
<id name="recordID" type="integer">
<generator strategy="AUTO" />
</id>
<many-to-one field="user" target-entity="Application\Model\User">
<join-column name="userID" referenced-column-name="userID" />
</many-to-one>
<field name="status" type="string" nullable="false" />
<one-to-many field="comments" target-entity="Application\Model\RecordComment" mapped-by="record" />
</entity>
记录评论
<entity name="Application\Model\RecordComment" table="recordComment">
<id name="recordCommentID" type="integer">
<generator strategy="AUTO" />
</id>
<indexes>
<index columns="userID" />
<index columns="recordID" />
</indexes>
<field name="comment" type="text" nullable="false" />
<field name="time" type="integer" length="11" nullable="false" />
<many-to-one field="user" target-entity="Application\Model\User">
<join-column name="userID" referenced-column-name="userID" />
</many-to-one>
<many-to-one field="record" target-entity="Application\Model\Record" inversed-by="comments">
<join-column name="recordID" referenced-column-name="recordID" />
</many-to-one>
</entity>
我正在努力创建一个表单来创建一个新记录,在其中添加多个评论。
如果我跳过评论,创建具有“状态”字段并链接到用户的新记录非常简单。但是,当我尝试同时向它添加评论时,一切都崩溃了。
我创建了两个字段集,一个是评论,一个是记录。但是,如何将 recordComment 链接到记录?我原以为链接会自动发生,因为 recordComment 被添加到记录中,但在数据库中,recordID 字段为 NULL。
这是我的 RecordComment 字段集:
class RecordCommentFieldset extends Fieldset implements InputFilterProviderInterface
{
protected $objectManager;
public function __construct(ObjectManager $objectManager)
{
parent::__construct('recordComment');
$this->objectManager = $objectManager;
$this->setHydrator(new DoctrineHydrator($this->objectManager, 'Application\Model\RecordComment'))
->setObject(new RecordComment());
$this->add(array(
'name' => 'comment',
'type' => 'Zend\Form\Element\Textarea',
));
}
public function getInputFilterSpecification()
{
return array(
'comment' => array(
'required' => true,
),
);
}
}
更新
我假设 Doctrine 会直接建立联系是错误的。注释实际上是在以下之后添加到记录中的:
$form->setData($this->request->getPost());
但是,在保留记录之前,我必须手动遍历注释并将记录分配回它们:
foreach($record->getComments() as $comment){
$comment->setRecord($record);
}
有没有另一种方法来解决这个问题,而无需手动迭代元素?如果没有创建反向连接,那么将元素添加到我的实体有什么意义?