0

多対多の方法で関連する 2 つのエンティティの関係を管理するフォームを作成しようとしています。

これらのエンティティは、PHONE と GROUP です。

両方のエンティティには、複合主キー、GROUP エンティティのIDUSER 、およびPHONE エンティティの PHONEUSERがあります。

  • ID : 数値の自動インクリメンタル ユニーク
  • PHONE : 数値
  • USER : ユーザー ID。表示されていない別のエンティティにリンクされています。

複合キーを使用して、DB サーバーでインデックスをクラスター化しています。

私の 2 つのエンティティは次のように定義されています: Phone エンティティ

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...
}

このエンティティの関係は問題なく機能しています。この 2 つのエンティティ間の関係を管理するフォームを作成しようとすると、問題が発生します。

私のコード:

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 列の複合キーを使用しています!!!

ここでは、任意の増分番号が生成されているため、選択した値が適切なエンティティにリンクされず、データベースに保持されません。

複合キーを削除せずにこれを機能させるにはどうすればよいですか?

4

1 に答える 1

0

この質問はずっと前に尋ねられました。私はこのテーマの初心者ですが、追加のエンティティクラスを1つ作成し、 Doctrine 2と多対多のリンクテーブルですでに説明されているケースに従う必要があると確信しています。分野

于 2015-02-25T12:59:56.793 に答える