我有问题,我想将原型数组添加到数据库,但这显示了这个错误:
类型" AppBundle \ Entity \ Tag"," array"的预期参数给定
...
发布 - > setTag(数组(数组('值' =>'测试'),数组('值' =>&#39 ;苔丝')))
这是我的标签制作者:
public function setTag(\AppBundle\Entity\Tag $tag = null)
{
$this->tag = $tag;
return $this;
}
我有两个关系实体,这里是关系:
class Post
{
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="post")
* @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
*/
private $tag;
public function setTag(\AppBundle\Entity\Tag $tag = null)
{
$this->tag = $tag;
return $this;
}
}
和标签:
class Tag
{
/**
* @ORM\ManyToMany(targetEntity="Post", mappedBy="tag")
*/
private $post;
}
来源:
答案 0 :(得分:1)
您正在尝试建模Post和Tag之间的双向多对多关系。
所以,首先,你的getter需要返回一个对象集合,你的setter需要接受一个对象集合 - 不仅是代码中的一个对象(你的setTag方法接受Tag类型的参数 - 但你需要一个类似数组的参数。)
其次,Doctrine框架不适用于简单的PHP数组,而是使用\ Doctrine \ Common \ Collections \ Collection的实现。
接下来,您需要使用Collection类的实现初始化实体类的构造函数中的集合字段 - 您可以使用\ Doctrine \ Common \ Collections \ ArrayCollection。
所以你的实体类看起来应该是这样的:
/**
* @ORM\Entity
*/
class Post
{
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="posts")
* @ORM\JoinTable(name="posts_tags")
*/
private $tags;
public function __construct()
{
$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getTags()
{
return $this->tags;
}
public function setTags(\Doctrine\Common\Collections\Collection $tags)
{
$this->tags = $tags;
}
}
/**
* @ORM\Entity
*/
class Tag
{
/**
* @ORM\ManyToMany(targetEntity="Post", mappedBy="tags")
*/
private $posts;
public function __construct()
{
$this->posts = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getPosts()
{
return $this->posts;
}
public function setPosts(\Doctrine\Common\Collections\Collection $posts)
{
$this->posts = $posts;
}
}
我强烈建议您再次阅读Doctrine框架的文档,如何注释您的实体以及如何建模关系:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/association-mapping.html