插入多对多的SonataAdmin Bundle

时间:2013-11-28 21:55:55

标签: php symfony many-to-many sonata-admin

我有两个表,一个名为Portal,另一个名为Categories,这些表由一个链接表连接,因为这种关系是多对多的。 代码表如下:

班级类别

/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
**/
private $id;

 /**
* @ManyToMany(targetEntity="Portal")
*/ 
 private $portal;

public function __construct() {
 $this->portal = new \Doctrine\Common\Collections\ArrayCollection();
}    
    ...
  

班级门户

class Portal
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")     
*/

private $id;


/**
* @ManyToMany(targetEntity="Categories")
* @JoinTable(name="portal_categories")
*/
private $categories;


   public function __construct() {
    $this->categories = new \Doctrine\Common\Collections\ArrayCollection();
  }
....

我开发了以下内容 在 PortalAdmin :: configureFormFields

$formMapper
         ->with('Portal')   
         ->add('name', 'text', array('label' => ' Name'))
         ->add('description', 'text', array('label' => 'Description'))
         ->add('webSiteLink', 'text', array('label' => 'Web Site ','required'=> false))           
         ->add('categories', 'sonata_type_collection',array( 'by_reference' => false))
     ->end();

但是,只显示一个带有弹出窗口的按钮,用于插入新类别,但我需要,只显示带有类别的列表并添加任意数量的类别

当我尝试这个时:

$formMapper
           ->with('Portal')   
                ->add('name', 'text', array('label' => ' Name'))
                ->add('description', 'text', array('label' => 'Description'))
                ->add('webSiteLink', 'text', array('label' => 'Web Site ','required'=> false))           
                ->add('categories', 'sonata_type_model', array('required' => false, 'expanded' => false, 'multiple' => true, 'label' => 'Chose your categories'))

            ->end();

显示以下错误: Project \ PortalBundle \ Entity \ Categories类的对象无法转换为字符串

1 个答案:

答案 0 :(得分:0)

可能对你有帮助。

请更改两个实体的注释。

实体门户

/** 
 * @var \Categories
 * @ORM\ManyToMany(targetEntity="Categories")
 * @ORM\JoinTable(name="portal_Categories",
 *      joinColumns={@JoinColumn(name="portal_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="cat_id", referencedColumnName="id")}
 * )
 */
private $categories;

实体类别

 /**
 * @var \Portal
 *  
 * @ORM\ManyToMany(targetEntity="Portal", mappedBy="categories")
 */
private $portals;

我试着用这个:

    $formMapper
       ->with('Portal')   
            ->add('name', 'text', array('label' => ' Name'))
            ->add('description', 'text', array('label' => 'Description'))
            ->add('webSiteLink', 'text', array('label' => 'Web Site ','required'=> false))           
            ->add('categories', 'sonata_type_model', array('required' => false, 'expanded' => false, 'multiple' => true, 'label' => 'Chose your categories'))

        ->end();

可能会有所帮助