我有这样的表格:
<?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';
}
}
当我将其保存在我的数据库中时,字段“tag”保存此字符串:
Doctrine\Common\Collections\ArrayCollection@000000000b3d932100000000287ad87a
而不是属性“tag”的值,我的错误是什么? 或者相反,这是正确的,我必须在twig模板中显示纠正格式?
提前谢谢你。
EDIT1:
解决方案: 最后,我不得不修改我的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;
}
}
实体标记没有变化。
这些更改会生成下一个数据库表:
表:twitter_has_tag
twitter_id
TAG_ID
我认为没关系,不是吗?
答案 0 :(得分:0)
您需要在Twitterposts和Tags实体之间建立ManyToMany关系。
你需要把这样的东西放到你的Twitter子实体:
/**
* @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实体中执行另一方。
以下是Doctrine文档: http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#many-to-many-unidirectional