正确保留Symfony中的相关实体(外键)

时间:2014-05-20 03:35:02

标签: php entity-framework symfony doctrine

我有两个对象:公司和位置

公司可以拥有多个地点(比如代表他们在办公室的每个城市)。

我已经设置了模型/实体来表示这种关系:

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);

我很好奇这是如何工作的,或者如果我正在咆哮错误的树,应该只在一个事务中添加公司,然后再添加位置。任何想法都赞赏 - 谢谢。

1 个答案:

答案 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