【问题标题】:Wrong datatype for referenced entity on Doctrine ObjectSelectDoctrine ObjectSelect 上引用实体的数据类型错误
【发布时间】:2015-06-11 22:25:14
【问题描述】:

我有一个表单,它使用 Doctrine 的 ObjectSelect 进行下拉

$this->add(array(
        'name' => 'category',
        'type' => 'DoctrineModule\Form\Element\ObjectSelect',
        'options' => array(
            'label' => 'Category',
            'object_manager' => $em,
            'target_class' => 'Blog\Entity\Category',
            'property' => 'name'
        ),
        'attributes' => array(
            'required' => true
        )
 ));

我遇到的问题是,这应该引用另一个实体的 id,但是它一直在抛出 “关联字段“Blog\Entity\Post#$category”的类型为“Blog\Entity\Category”的预期值,改为“string”。”

这是表单中的 var_dump,重要的部分

object(Zend\InputFilter\InputFilter)[337]
  protected 'factory' => null
  protected 'data' => 
    array (size=5)
      'id' => string '' (length=0)
      'title' => string 'asdasd' (length=6)
      'content' => string '<p>asdasd</p>' (length=13)
      'category' => string '3' (length=1)
      'submit' => string 'Add' (length=3)

还有我的 addAction

public function addAction()
{   
    $form = new PostForm($this->getEntityManager());
    $form->setHydrator(new DoctrineEntity($this->getEntityManager(),'Blog\Entity\Post'));

    $form->get('submit')->setValue('Add');

    $request = $this->getRequest();
    if ($request->isPost()) {
        $post = new Post();
        $form->setInputFilter($post->getInputFilter());
        $form->setData($request->getPost());

        $form->isValid();
        //debug
        var_dump($post);

        $post->exchangeArray($form->getData());
        $em = $this->getEntityManager();
        $em->persist($post);
        $em->flush();
        $this->flashMessenger()->addSuccessMessage('Post Saved');
        return $this->redirect()->toRoute('post');
    }
     return new ViewModel(array(
        'post' => $post,
        'form' => $form
    ));
}

我将如何解决这个问题,我不明白它如何不抱怨 id,但它确实如此。

UPDATE ** 类别实体 ORM 注释

/**
 *
 * @ORM\ManyToOne(targetEntity="Category")
 * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
 */
private $category;

【问题讨论】:

    标签: php zend-framework orm doctrine-orm


    【解决方案1】:

    您对此字段集的 hydrator 设置是什么?

    例如;

    $this->setHydrator(new DoctrineHydrator($em, 'Blog\Entity\Category'))
                 ->setObject(
                     new Category()
                 );
    

    【讨论】:

    • 真正的问题是,我不确定是否应该将数据库数据类型更改为 varchar 或编辑帖子实体以告诉 ORM 它是一个整数。
    • 那么你的补水器设置好了?尝试在字段集中设置它们,或者如果您可以提供一个用于 FORM 处理的 addAction 示例,那就太好了。
    • 实体中的 Blog#$category 注释是什么?
    • 从该实体检索结果时,您是否总是获得关联的类别?
    猜你喜欢
    • 2018-06-03
    • 2018-02-16
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多