0

私はこれらの3つのテーブルを持っています

これらのフィールドを持つ「Business」: Id、Name など。これらのフィールドを持つ「City」: Id、Name など。

次に、BusinessCity というテーブルがあります (ビジネスが多くの都市に関連している可能性があるため)。このテーブルには、フィールド「BusinessId」と「CityId」があります。

クラスBusinessCityで、CityIdをCityエンティティに、BusinessIdをビジネスエンティティに関連付けようとしています。私は過去 3 日間これをグーグル検索してきましたが、答えを見つけることができませんでした。誰かが私を助けたり、これを成し遂げる方法についての指針を教えてくれませんか. 前もって感謝します

4

2 に答える 2

2

あなたが達成しようとしているのは、 joinTableとの双方向の多対多の関係です。

多くの企業は複数の都市に存在する可能性があり、1 つの都市に複数の企業が存在する可能性があります。

多対多の関係では、どちらの側も所有側になることができます。JoinTable の定義は省略でき、適切なデフォルトがありますが、具体的に指定したい場合は、例に含めました。

ビジネス(この例では:所有側 = inversedBy = JoinTable 定義)

/**
 * @ORM\ManyToMany(targetEntity="Your/Bundle/City", inversedBy="businesses",cascade="{persist,merge}" fetch="EAGER")
 * @ORM\JoinTable(name="BusinessCity",
 *    joinColumns={@JoinColumn(name="business_id", referencedColumnName="id")},
 *    inverseJoinColumns={@JoinColumn(name="city_id", referencedColumnName="id")}
 *  )
 */
protected $cities;

public function __construct()
{
   $this->cities = new ArrayCollection();
}

public function getCities()
{
   return $this->cities;
}

public function setCities(Collection $cities)
{
   // using map with closure to have dublicate/type-checking provided by addCity
   $this->cities->map(function($city) {
       $this->addCity($city);
   });

   return $this;
}

public function addCity(CityInterface $city)
{
    // ... you don't want dublicates in your collection
    if (!$this->cities->contains($city)) {
       $this->cities->add($city);
    }

   return $this;
}

public function removeCity(CityInterface $city)
{
    $this->cities->removeElement($city);

    return $this;
}
// other properties and methods ..

市区町村(逆側 = mappingBy )

/**
 * @ORM\ManyToMany(targetEntity="Your/Bundle/Business", mappedBy="cities")
 */
protected $businesses;

// getters & setters ...
// other properties and methods ...
于 2013-05-27T20:31:40.793 に答える
1

これは実際には非常に単純で、JoinTable を定義するだけです。ドキュメントで見つけるのは簡単ではありませんが、 Composite Primary Keysセクションに例があります。

つまり、Business と City の両方を ManyToMany-association に直接関連付けるのではなく、JoinTable を表すクラスで oneToMany/manyToOne-associations を使用するだけで済みます。

于 2013-05-27T20:01:50.593 に答える