我有两个对象:公司和位置
公司可以拥有多个地点(比如代表他们在办公室的每个城市)。
我已经设置了模型/实体来表示这种关系:
Location: id, address, company
Company: id, name, locations
所以我在公司上有自动生成的功能:
public function addLocation(Location $locations)
{
$this->locations[] = $locations;
return $this;
}
我的问题是,如果我想在我的数据库中添加新公司和新位置 - 我可以通过添加到公司中的位置来实现吗? Symfony能够聪明地弄清楚所有的外键ID吗?
说我想创建:
$company = new Company();
$company->setName('NEW COMPANY');
$location1 = new Location();
$location1.setAddress('123 Fake St');
// $location1.setCompany($company) // Is this required?
$location2 = new Location();
$location2.setAddress('456 Test Hwy');
// $location2.setCompany($company) // Is this required?
$company->addLocation($location1);
$company->addLocation($location2);
我很好奇这是如何工作的,或者如果我正在咆哮错误的树,应该只在一个事务中添加公司,然后再添加位置。任何想法都赞赏 - 谢谢。
答案 0 :(得分:1)
你可以这样做:
<?php
/** @Entity */
class Company
{
// ...
/**
* @ManyToMany(targetEntity="Location", inversedBy="companies")
* @JoinTable(name="company_location")
*/
private $locations;
public function __construct() {
$this->locations = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
/** @Entity */
class Location
{
// ...
/**
* @ManyToMany(targetEntity="Company", mappedBy="locations")
*/
private $companies;
public function __construct() {
$this->companies = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
我认为您正在寻找级联持续存在,请在此处阅读更多内容:Doctrine 2 ManyToMany cascade