我在公共汽车和司机之间有这么多对多的关系。
这是总线实体:
/**
* @var ArrayCollection<Driver> The driver of this bus.
* @ORMManyToMany(targetEntity="Driver", inversedBy="bus" , cascade={"persist"})
* @ORMJoinTable(name="bus_driver")
* @ORMJoinColumn(name="driver_id", referencedColumnName="id")
* */
private $driver;
public function __construct() {
$this->driver = new DoctrineCommonCollectionsArrayCollection();
}
public function addDriver($driver) {
$this->driver[] = $driver;
return $this;
}
这是驱动程序实体:
/**
* @var ArrayCollection<Bus> The buses of this driver
* @ORMManyToMany(targetEntity="Bus", mappedBy="driver")
* @ORMJoinTable(name="bus_driver")
* @ORMJoinColumn(name="bus_id", referencedColumnName="id")
*/
private $bus;
public function __construct() {
$this->bus = new DoctrineCommonCollectionsArrayCollection();
}
public function addBus($bus) {
$this->bus[] = $bus;
$bus->addDriver($this);
return $this;
}
我的问题是,当我添加带有驱动程序的总线时,关系会保持不变,但当我添加带有公共汽车的驱动程序时,关系会保持不变。它只能在总线一侧工作。
请考虑将$driver重命名为$drivers,因为有多个驱动程序(总线->总线相同)
然后你应该尝试一下:
@ORM\ManyToMany(targetEntity="xxx", cascade={"persist"})
更多详细信息: http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/working-with-associations.html#transitive-persistence-cascade-operations
更改这些(添加空值并将其称为"驱动程序"):
use DoctrineCommonCollectionsArrayCollection;
...
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 关系中也有类似的场景,我想知道上述更改是否有效。
唯一的工作场景是当我有:
驱动程序集合的二传手。一个 addDriver 方法 .删除驱动程序方法。
如果我删除其中一个,addDriver 甚至根本不会触发。