0
我試圖創建一個表單來管理多對多關聯的2個實體。在Symfony2上實體具有複合主鍵的表單上多對多
這些實體是PHONE和GROUP。
這兩個實體具有複合主鍵,ID和GROUP實體USER和PHONE和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列組合鍵!
這裏,正在生成一個任意的遞增數字,導致選定的值沒有被鏈接到正確的實體,並且沒有被持久化在數據庫中。
我怎樣才能使這項工作沒有擺脫我的複合鍵?