【发布时间】:2026-01-20 03:20:04
【问题描述】:
这快把我逼疯了。
一个Client 可以有多个Vehicles。
这是一对多的关系。尝试保存实体时,我收到一条错误消息,指出外键为空。当我删除 Doctrine 关系并单独存储 Vehicle 时,一切正常。
这就是我创建关系的方式:
class Vehicle {
...
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="vehicles")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
*/
public $client;
}
class Client {
...
public function __construct()
{
parent::__construct();
$this->vehicles = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @ORM\OneToMany(targetEntity="Vehicle", mappedBy="client", cascade={"persist"})
*/
private $vehicles;
}
我尝试像这样保存实体:
$client = new Client();
$vehicle = new Vehicle();
$client->getVehicles()->add($vehicle);
$em->persist($client);
$em->flush();
接下来我得到一个 PDO 异常,指出 client_id 不能是 Vehicle 表上的 null。
Doctrine 似乎没有正确复制外键。
我做错了什么?
【问题讨论】:
-
你有没有
persist()$vehicle在某个地方? -
@andy 不,因为我在做
cascade={"persist"} -
啊,对。详细检查代码:
public $client至少可能会导致旧版本 Doctrine 的代理出现问题。 -
@andy 好的,让我明天回到办公室试试
-
@andy 所有实例变量都不是
private(当然应该是),但不幸的是,这并没有解决问题
标签: php database pdo doctrine-orm doctrine