gpt4 book ai didi

php - 原则 2,使用外键插入表时出错

转载 作者:行者123 更新时间:2023-11-29 13:26:40 24 4
gpt4 key购买 nike

我对 Doctrine 非常陌生,这是我使用它的第一个项目,当我尝试插入新用户时遇到错误。

问题是我有一个带有外键国家/地区的用户类,当我尝试插入用户 Doctrine 时也尝试插入国家/地区,该国家/地区已经存在,因此 PDO 启动完整性约束违规,并且 Doctrine a Doctrine\DBAL\DBALException。

我知道注释cascade={"persist"}使国家/地区实体写入数据库,没有它,学说会引发另一个错误:

A new entity was found through the relationship 'User#country' that was not configured to cascade persist operations for entity: Country@0000000078b1861f00007f935266d9fe. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist  this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'Country#__toString()' to get a clue.

我尝试过所有级联选项,并且仅使用持久选项,并且上面的所有错误都没有出现...

是否有类似cascade={"no-persist"}的东西或者告诉学说该属性的值必须已经插入到表国家/地区中???

一些代码:

/**
* User
*
* @Table(name="user")
* @Entity
*/
class User {
...
/**
* @var Country
*
* @OneToOne(targetEntity="Country", cascade={"persist"})
* @JoinColumn(name="country", referencedColumnName="id")
*/
private $country
...
}
/**
* Country
*
* @Table(name="country")
* @Entity
*/
class Country {
...
/**
* @var integer
*
* @Column(name="id", type="integer")
* @Id
*/
private $id;

}

任何线索都将受到高度赞赏。谢谢。

最佳答案

把cascade=persist放回去。

您需要检查数据库以查看该国家/地区是否存在。插入现有国家/地区失败,因为国家/地区对象需要由实体管理器管理。

$country = $countryRepository->find($countryId);
if (!$country)
{
$country = new Country();
$entityManager->persist($country);
}
$user->setCountry($country);

关于php - 原则 2,使用外键插入表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com