2016-06-13 106 views
0

我試圖用奏鳴曲表單添加類別。我的表類別中我的數據庫看起來是這樣的:奏鳴曲類型模型 - 父類別

enter image description here

表包含:

  • ID
  • 啓用
  • parent_category_id

parent_category_id可以爲空。所以我想有一個選擇列表,你可以選擇一個父類別。但是我對創建這個有點困惑。我的實體類別看起來是這樣的:

<?php 

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Category 
* 
* @ORM\Table(name="category", indexes={@ORM\Index(name="fk_category_category_idx", columns={"parent_category_id"})}) 
* @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository") 
*/ 
class Category 
{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=false) 
    */ 
    private $name; 

    /** 
    * @var boolean 
    * 
    * @ORM\Column(name="enabled", type="boolean", nullable=false) 
    */ 
    private $enabled = true; 

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

    /** 
    * @var \AppBundle\Entity\Category 
    * 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="parent_category_id", referencedColumnName="id") 
    * }) 
    */ 
    private $parentCategory; 

    public function __toString() 
    { 
     return $this->getName(); 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Category 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set enabled 
    * 
    * @param boolean $enabled 
    * 
    * @return Category 
    */ 
    public function setEnabled($enabled) 
    { 
     $this->enabled = $enabled; 

     return $this; 
    } 

    /** 
    * Get enabled 
    * 
    * @return boolean 
    */ 
    public function getEnabled() 
    { 
     return $this->enabled; 
    } 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set parentCategory 
    * 
    * @param \AppBundle\Entity\Category $parentCategory 
    * 
    * @return Category 
    */ 
    public function setParentCategory(\AppBundle\Entity\Category $parentCategory = null) 
    { 
     $this->parentCategory = $parentCategory; 

     return $this; 
    } 

    /** 
    * Get parentCategory 
    * 
    * @return \AppBundle\Entity\Category 
    */ 
    public function getParentCategory() 
    { 
     return $this->parentCategory; 
    } 
} 

這是我至今無父類中進行選擇:

<?php 

// src/AppBundle/Admin/CategoryAdmin.php 
namespace AppBundle\Admin; 

use AppBundle\Repository\CategoryRepository; 
use Sonata\AdminBundle\Admin\AbstractAdmin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 

class CategoryAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('name', 'text') 
      ->add('enabled', 'checkbox'); 
    } 

    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper->add('name'); 
    } 

    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper 
      ->addIdentifier('name'); 
    } 
} 

但現在我卡與添加父類別中選擇(這不需要選擇)。

+0

首先,請註明,你想在哪兒這種選擇?作爲列表視圖中的過濾器?或者在編輯視圖? – lllypa

回答

1

你有沒有嘗試過這樣的:

protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper 
     ->add('name') 
     ->add('parentCategory') 
     ; 
} 

基本上,索納塔將處理類型,期權等表單域本身,如果你的實體被正確配置。所以,只需添加屬性「parentCategory」應該添加parentCategory過濾器並創建與所有現有類別的下拉菜單。

但是,說實話,你的問題應該minused,因爲它聽起來像你沒能讀索納塔管理文檔:https://sonata-project.org/bundles/admin/master/doc/index.html