0

我正在尝试创建一个表单来管理以多对多方式相关的 2 个实体的关系。

这些实体是 PHONE 和 GROUP。

两个实体都有一个复合主键,IDUSER用于 GROUP 实体,PHONEUSER用于 PHONE 实体,即:

  • ID:数字自动增量唯一
  • 电话:数字
  • USER:用户 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>

通常,每个选项标签上的value属性代表被选择的实体的 ID ...但我不是使用单列 ID,而是使用 2 列复合键!!!

在这里,正在生成一个任意递增的数字,导致选定的值没有链接到正确的实体,也没有被持久化到数据库中。

我怎样才能在不摆脱我的复合键的情况下完成这项工作?

4

1 回答 1

0

这个问题很久以前就被问过了,我是这个主题的新手,但我很确定你必须创建一个额外的实体类并遵循Doctrine 2 和多对多链接表中已经描述的案例场地

于 2015-02-25T12:59:56.793 回答