我在公交车和司机之间有这么多关系。
这是巴士实体:
/**
* @var ArrayCollection<Driver> The driver of this bus.
* @ORM\ManyToMany(targetEntity="Driver", inversedBy="bus" , cascade={"persist"})
* @ORM\JoinTable(name="bus_driver")
* @ORM\JoinColumn(name="driver_id", referencedColumnName="id")
* */
private $driver;
public function __construct() {
$this->driver = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addDriver($driver) {
$this->driver[] = $driver;
return $this;
}
这是驱动程序实体:
/**
* @var ArrayCollection<Bus> The buses of this driver
* @ORM\ManyToMany(targetEntity="Bus", mappedBy="driver")
* @ORM\JoinTable(name="bus_driver")
* @ORM\JoinColumn(name="bus_id", referencedColumnName="id")
*/
private $bus;
public function __construct() {
$this->bus = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addBus($bus) {
$this->bus[] = $bus;
$bus->addDriver($this);
return $this;
}
我的问题是,当我添加一个带驱动程序的总线时,关系会保持不变,但是当我添加一个总线驱动程序时却没有。它只适用于公交车。
答案 0 :(得分:0)
请考虑将$ driver重命名为$ drivers,因为有多个驱动程序(总线相同 - &gt;总线)
然后你应该尝试:
@ORM \ ManyToMany(targetEntity =&#34; xxx&#34;,cascade = {&#34; persist&#34;})
答案 1 :(得分:0)
更改这些(添加null并将其命名为'drivers'):
use Doctrine\Common\Collections\ArrayCollection;
...
private $drivers = null;
public function __construct() {
$this->drivers = new ArrayCollection();
}
public function addDriver($driver) {
$this->drivers[] = $driver;
return $this;
}
另外,要从总线实体方面解决问题,您可能(但我不确定)需要进行此更改:
public function addDriver($driver) {
$driver->addBus($this);
$this->drivers[] = $driver;
return $this;
}
尝试一下,因为我在ManyToOne关系中有类似的场景,我想知道上述改变是否有效。
答案 2 :(得分:0)
唯一的工作场景是我的时候:
驱动程序集合的setter。 addDriver方法。 removeDriver方法。
如果我删除了其中一个,那么addDriver甚至不会触发。