Symfony2,关系 manyToMany 在形式上



我开始学习sf2,很酷,对于我的问题,我有两个表:

媒体

/**
 * @ORMManyToMany(targetEntity="TestSiteBundleEntityWebsite", inversedBy="medias")
 * @ORMJoinTable(name="media_website")
private $websites;

网站

/**
 * @ORMManyToMany(targetEntity="TestSiteBundleEntityMedia", mappedBy="websites")
private $medias;

在我的媒体类型中.php我有这个:

$builder
        ->add('title')
        ->add('website', 'entity', array(
            'class'         =>  'TestSiteBundle:Website',
            'property'  =>  'name',
            'query_builder' => function(WebsiteRepository $er)use($user_id) {
                               return $er->getMyWebsites($user_id);
             },
            'multiple'=>false))

最后,在树枝页面中,我有这个:

<div class="form-group">
   {{ form_label(form.description, "Description", { 'label_attr': {'class': 'control-label col-md-2'} }) }}
   <div class="col-md-5">
        {{ form_widget(form.description, { 'attr': {'class': 'form-control'} }) }}
   </div>
</div>

当我尝试添加媒体时,出现此错误:

Neither the property "websites" nor one of the methods "setWebsites()", "__set()" or "__call()" exist and have public access in class "TestSiteBundleEntityMedia". 

有什么帮助吗?非常感谢你。

我发现它,对于有同样问题的人,在关系中 ManyToMany 你需要在你的 FormType 中有 multiple=>true,所以我的 MediaType 应该是:

$builder
        ->add('websites', 'entity', array(
            'class'         =>  'EveadSiteBundle:Website',
            'property'  =>  'name',
            'query_builder' => function(WebsiteRepository $er)use($user_id) {
                               return $er->getMyWebsites($user_id);
             },
            'multiple'=>true))

两个类的属性设置为protected而不是private,以允许 doctrine 在其代理类中访问它们。

您还需要添加公共 getter 和 setter 方法,以便在应用程序中访问模型上的数据。您可以使用Symfony控制台的doctrine:generate:entities命令 - 请参阅此处的文档

相关内容

  • 没有找到相关文章