0

我有这个表格:

<?php
namespace FEB\TwitterBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class TwitterpostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('titulo')
                ->add('tweet', 'textarea')
                ->add('photo', 'file', array('required' => false))              
                ->add('tags', 'entity', array(
                                                'class' =>    'FEBTagsBundle:tag',
                                                'property' => 'tag',
                                                'empty_value' => 'Selecciona tags',
                                                'multiple' => true));               
    }
    public function getName()
    {
        return 'twitter_form';
    }
}

当我将它保存在我的数据库中时,“标签”字段会保存这个字符串:

Doctrine\Common\Collections\ArrayCollection@000000000b3d932100000000287ad87a

而不是属性“标签”的值,我的错误是什么?或者相反,这是正确的,我必须以正确格式的树枝模板显示它?

先感谢您。

编辑1:

解决方案: 最后,我只需要修改我的 twitterpost 实体:

<?php

namespace FEB\TwitterBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * Twitterpost
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="FEB\TwitterBundle\Entity\TwitterpostRepository")
 */
class Twitterpost
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="titulo", type="string", length=50)
     * @Assert\NotNull(message="Debe escribir un titulo")
     */
    private $titulo;

    /**
     * @var string
     *
     * @ORM\Column(name="tweet", type="string", length=145)
     * @Assert\NotNull(message="Debe escribir un tweet")
     */
    private $tweet;


  /**
   * Many-To-Many, Unidirectional
   *
   * @var ArrayCollection $tags
   *
   * @ORM\ManyToMany(targetEntity="\FEB\TagsBundle\Entity\tag")
   * @ORM\JoinTable(name="twitter_has_tag",
   *      joinColumns={@ORM\JoinColumn(name="twitter_id", referencedColumnName="id")},
   *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
   * )
   */
    private $tags;

      public function __construct()
   {
    $this->tags = new ArrayCollection();
   }


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set titulo
     *
     * @param string $titulo
     * @return Twitterpost
     */
    public function setTitulo($titulo)
    {
        $this->titulo = $titulo;

        return $this;
    }

    /**
     * Get titulo
     *
     * @return string 
     */
    public function getTitulo()
    {
        return $this->titulo;
    }

    /**
     * Set tweet
     *
     * @param string $tweet
     * @return Twitterpost
     */
    public function setTweet($tweet)
    {
        $this->tweet = $tweet;

        return $this;
    }

    /**
     * Get tweet
     *
     * @return string 
     */
    public function getTweet()
    {
        return $this->tweet;
    }

    /**
     * Set tags
     *
     * @param string $tags
     * @return Twitterpost
     */
    public function setTags($tags)
    {
        $this->tags = $tags;

        return $this;
    }

    /**
     * Get tags
     *
     * @return string 
     */
    public function getTags()
    {
        return $this->tags;
    }   
}

Entity 标签没有变化。

该更改生成下一个数据库表:
表:twitter_has_tag
twitter_id
tag_id

我觉得没关系,不是吗?

4

1 回答 1

0

您需要在 Twitterposts 和 Tags 实体之间建立多对多关系。

你需要在你的 Twitterposts 实体中加入这样的东西:

/**
 * @ORM\ManyToMany(targetEntity="Tags", inversedBy="twitterposts")
 * @ORM\JoinTable(name="twitterpost_tags",
 *   joinColumns={@ORM\JoinColumn(name="twitterpost_id", referencedColumnName="id")},
 *   inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
 * )
 */
private $tags;

并将其作为 ArrayCollection 获取:

public function __construct() {
    $this->tags = new ArrayCollection();
}

将此元素设置为 getter 和 setter,并在您的 Tags 实体中执行另一面。

这是教义文档: http ://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional

于 2013-07-31T11:32:15.100 回答