添加方法在多对多关系中不起作用



我在公共汽车和司机之间有这么多对多的关系。

这是总线实体:

/**
     * @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 甚至根本不会触发。

相关内容

  • 没有找到相关文章

最新更新