a problem I had with variations of entitiesを回避するために、デバイスの修理に使用できる色の数を制限しようとしています。使用可能な色は、デバイスで使用可能な色を超えてはいけません。Symfony/Doctrine:結合テーブルへのアクセス?
だから私は持っている:
Device.php
これは、色と、このデバイスで利用可能な修理にデバイスをマップします。
/**
* @ORM\OneToMany(targetEntity="Repair", mappedBy="device", cascade={"remove"})
*/
private $repairs;
/**
* @ORM\ManyToMany(targetEntity="Color", inversedBy="devices")
* @ORM\JoinTable(name="devices_colors",
* joinColumns={@ORM\JoinColumn(name="device_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="color_id", referencedColumnName="id")}
* )
*/
private $colors;
Color.php
/**
* @ORM\ManyToMany(targetEntity="Device", mappedBy="colors")
*/
private $devices;
Repair.php
これは、デバイスにも色に修理の仕事をマッピングします。 Color
エンティティで使用できる色に「色」は、このフィールドをマップするが、Device
/**
* @ORM\ManyToOne(targetEntity="Device", inversedBy="repairs")
* @ORM\JoinColumn(name="device_id", referencedColumnName="id")
*/
private $device;
/**
* @ORM\ManyToMany(targetEntity="Color")
* @ORM\JoinTable(name="repairs_colors",
* joinColumns={@ORM\JoinColumn(name="repair_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="color_id", referencedColumnName="id")}
* )
*/
private $colors;
RepairType.php
ポイントにあります
->add('colors', EntityType::class, array(
'label'=>'Kleuren',
'class'=>'AppBundle:Color',
'choice_label'=>'name',
'choice_value'=>'id',
'multiple'=>true,
'expanded'=>true,
'query_builder'=>function (EntityRepository $er) use ($device) {
return $er->createQueryBuilder('c')
->join('AppBundle:Device','d')
->where('d.id = :device')
->setParameter('device', $device);
}
)
)
devices_colors結合テーブルが作成されていることがわかっているので、次のMySQLクエリのdirectlサーバーのy:
SELECT c.name FROM colors c LEFT JOIN devices_colors d ON (d.color_id=c.id) WHERE d.device_id = 1
ただし、上記の修復方法での試みでは、同じ結果が得られません。私はいつも、Device
に設定されたものだけでなく、すべての色を利用できます。私は間違って何をしていますか?