2012-08-16 55 views
0

我試圖創建一個表單來管理多對多關聯的2個實體。在Symfony2上實體具有複合主鍵的表單上多對多

這些實體是PHONE和GROUP。

這兩個實體具有複合主鍵,ID和GROUP實體USERPHONE和PHONE實體USER,爲:

  • ID:數字自動增加的獨特
  • PHONE:數字
  • 用戶:用戶ID,鏈接到未顯示的另一個實體。

我正在使用組合鍵在數據庫服務器上對我的索引進行聚類。

我2個實體的定義如下所示: 手機實體

class Phone 
{ 
/** 
* @var integer $phoneNo 
* 
* @ORM\Column(name="phone_no", type="bigint", nullable=false) 
* @ORM\Id 
* 
*/ 
private $phoneNo; 

/** 
* @var Group 
* 
* @ORM\ManyToMany(targetEntity="Group", inversedBy="phone") 
* @ORM\JoinTable(name="phone_has_group", 
* joinColumns={ 
*  @ORM\JoinColumn(name="user", referencedColumnName="user"), 
*  @ORM\JoinColumn(name="phone_no", referencedColumnName="phone_no") 
* }, 
* inverseJoinColumns={ 
*  @ORM\JoinColumn(name="group_contact", referencedColumnName="id") 
* } 
*) 
*/ 
private $group; 

/** 
* @var User 
* 
* @ORM\ManyToOne(targetEntity="User") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="user", referencedColumnName="id") 
* }) 
* @ORM\Id 
*/ 
private $user; 

// more properties, getters and setters... 
} 

集團實體

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

/** 
* @var string $name 
* 
* @ORM\Column(name="name", type="string", length=45, nullable=false) 
*/ 
private $name; 

/** 
* @var Phone 
* 
* @ORM\ManyToMany(targetEntity="Phone", mappedBy="group") 
*/ 
private $phone; 

/** 
* @var User 
* 
* @ORM\ManyToOne(targetEntity="User") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="user", referencedColumnName="id") 
* }) 
* @ORM\Id 
*/ 
private $user; 

// more properties, getters and setters... 
} 

這個實體的關係是工作得很好。當我嘗試創建一個表單來管理這兩個實體之間的關係時,問題就出現了。

我的代碼:

class GroupType extends AbstractType 
{ 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     ->add('name', 'text', 
       array('label' => 'Nombre')) 
     ->add('phone', 'entity', 
       array(
        'label' => 'Contactos en este grupo', 
        'class' => 'SMSBundle:Phone', 
        'expanded' => false, 
        'required' => false, 
        'multiple' => true, 
       )) 
    ; 
} 

生成此:

<select id="e_keyword_phone" name="e_keyword[phone][]" multiple="multiple"> 
    <option value="0">4490000000</option> 
    <option value="1">4490000001</option> 
    <option value="2">4490000002</option> 
    <option value="3">4490000003</option> 
    <option value="4">4490000004</option> 
    <option value="5">4490000005</option> 
</select> 

通常情況下,每個選項標籤屬性代表的實體的ID被選擇......但我沒有使用單列ID,而是使用2列組合鍵!

這裏,正在生成一個任意的遞增數字,導致選定的值沒有被鏈接到正確的實體,並且沒有被持久化在數據庫中。

我怎樣才能使這項工作沒有擺脫我的複合鍵?

回答

相關問題