Php 计算密钥原则

Php 计算密钥原则,php,symfony,doctrine,Php,Symfony,Doctrine,我有这三张桌子 带有以下字段的“业务”:Id、名称等。。 带有以下字段的“城市”:Id、名称等 然后我有一个名为BusinessCity的表(考虑到一个企业可以与许多城市相关)。此表包含字段“BusinessId”和“CityId” 我试图在BusinessCity类中将CityId与City实体关联,将BusinessId与business实体关联。在过去的3天里,我一直在用谷歌搜索这个问题,但找不到答案。如果之前有人问过这个问题,我很抱歉我没有看到它。谁能帮我一下,或者给我一些关于如何完成这

我有这三张桌子

带有以下字段的“业务”:Id、名称等。。 带有以下字段的“城市”:Id、名称等

然后我有一个名为BusinessCity的表(考虑到一个企业可以与许多城市相关)。此表包含字段“BusinessId”和“CityId”


我试图在BusinessCity类中将CityId与City实体关联,将BusinessId与business实体关联。在过去的3天里,我一直在用谷歌搜索这个问题,但找不到答案。如果之前有人问过这个问题,我很抱歉我没有看到它。谁能帮我一下,或者给我一些关于如何完成这件事的建议。提前感谢

这实际上非常简单,您只需定义JoinTable即可。在文档中不容易找到,但本节中有一个示例


简而言之,您所要做的就是对表示JoinTable的类使用oneToMany/manytone关联,而不是直接将Business和City与许多关联关联起来。

这实际上非常简单,您所要做的就是定义JoinTable。在文档中不容易找到,但本节中有一个示例


简言之,您所要做的就是对表示您的JoinTable的类使用一对多/多对一关联,而不是将Business和City直接关联到多对多关联。

您试图实现的是与JoinTable的双向多对多关系

许多企业可以居住在多个城市,一个城市可以有多个企业

在多对多关系中,任何一方都可以是拥有方。JoinTable定义可以省略,并且具有合理的默认值,但是如果您想具体地指定它,我将其包含在示例中

业务(在本例中:拥有方=反向方=可联接定义)

城市(反向侧=mappedBy)


您试图实现的是一种双向的多对多关系,具有一个可连接

许多企业可以居住在多个城市,一个城市可以有多个企业

在多对多关系中,任何一方都可以是拥有方。JoinTable定义可以省略,并且具有合理的默认值,但是如果您想具体地指定它,我将其包含在示例中

业务(在本例中:拥有方=反向方=可联接定义)

城市(反向侧=mappedBy)


你能分享你的表格结构吗?嗯,如果你还没有实现。。。也许看看我的答案。花了一段时间回答,同时你接受了mahok的。。。在示例中做一些工作:)你能分享一下你的表结构吗?嗯,如果你还没有实现。。。也许看看我的答案。花了一段时间回答,同时你接受了mahok的。。。在示例中加入一些工作:)这正是我要找的!这正是我要找的!
/**
 * @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 ..
/**
 * @ORM\ManyToMany(targetEntity="Your/Bundle/Business", mappedBy="cities")
 */
protected $businesses;

// getters & setters ...
// other properties and methods ...