我在Document
和Tag
个实体之间存在ManyToMany关系,但在添加新的Document
时我无法保留Tag
警告:spl_object_hash()要求参数1为对象,给定字符串
这是我得到的错误,我正在尝试使用SelectizeJS来创建标签,这是我Document
的映射内容
/**
* @return ArrayCollection
*/
public function getTags()
{
return $this->tags;
}
/**
* @param ArrayCollection $tags
*/
public function addTag($tag)
{
$this->tags->add($tag);
}
和
<many-to-many field="tags" target-entity="Foo\Bar\Entity\Tag">
<join-table name="academy_document_tags">
<join-columns>
<join-column name="tag_id" referenced-column-name="id" />
</join-columns>
<inverse-join-columns>
<join-column name="document_id" referenced-column-name="id" />
</inverse-join-columns>
</join-table>
</many-to-many>
我正在使用它来创建表单
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('tags', new TagsType(), array(
'attr' => array(
'class' => 'input-tags'
)
))
;
}
TagsType
有一个DataTransformer
class TagsType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addViewTransformer(new TagsTransformer());
}
public function getParent()
{
return 'text';
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Foo\Bar\Entity\Tag'
));
}
/**
* @return string
*/
public function getName()
{
return 'foobar_tag';
}
}
class TagsTransformer implements DataTransformerInterface
{
public function transform($tags)
{
$tags = $tags->toArray();
if (count($tags) < 1)
return '';
else
return implode(',', $tags);
}
public function reverseTransform($string)
{
$tags = new ArrayCollection();
$tagsArray = explode(',', $string);
if (count($tagsArray) > 0)
$tags = new ArrayCollection($tagsArray);
return $tags;
}
}
我们的想法是让Tag
实体仅包含id
,name
和slug
字段,因为我想使用与Tag具有ManyToMany关系的其他实体,因此使用双向不是一种选择。
我不知道我的错误在哪里,也许在做addTag($tag)
时,我调试了它,一切似乎都正确,它将一个新元素传递给ArrayCollection
项...