Php 条令2由于缺少ID而无法插入
在尝试使用Doctrine 2的persist flush方法进行插入时,我根本无法实现这一点。元数据被设置为生成一个值(我尝试了自动和标识,但没有成功),但它仍然不是自动递增的。我还注意到,在数据库的模式中,“id”列也没有设置为自动递增。该实体不包含预/后持久化函数 XXXX类型的实体缺少为字段“ID”分配的ID。此实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果希望自动生成标识符,则需要相应地调整元数据映射Php 条令2由于缺少ID而无法插入,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,在尝试使用Doctrine 2的persist flush方法进行插入时,我根本无法实现这一点。元数据被设置为生成一个值(我尝试了自动和标识,但没有成功),但它仍然不是自动递增的。我还注意到,在数据库的模式中,“id”列也没有设置为自动递增。该实体不包含预/后持久化函数 XXXX类型的实体缺少为字段“ID”分配的ID。此实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果希望自动生成标识符,则需要相应地调整元数据映射 我想知道是否有人对此有任何见解,
我想知道是否有人对此有任何见解,因为我似乎找不到任何谷歌或stackoverflow的结果有帮助。谢谢 您必须在注释前面加上
@ORM\
,如下所示:
use Doctrine\ORM\Mapping as ORM;
...
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;
因此,问题似乎是由于有多个带有@GeneratedValue注释的列(即使设置为NONE)。删除它们并将$id保留为唯一一个解决了此问题。我通过清除缓存解决了此问题。当您设置
@GeneratedValue(strategy=“AUTO”)
时,是否清除注释缓存并尝试更新架构?我清除了所有三个缓存(查询、元数据和结果)如果你使用的是ORM,那么你的注释是错误的。您需要像“@ORM\Id”、“@ORM\Column(type=“integer”)、“@ORM\GeneratedValue(strategy=“IDENTITY”)”这样声明它,我在文件的开头有“使用条令\ORM\Mapping as ORM;”,所以它应该可以正常工作?尝试了,现在就得到了:[条令\ORM\Mapping\MappingException]没有为实体“XXXX”指定标识符/主键“yyy”的子类。每个实体都必须有一个标识符/主键。
现在似乎忽略了注释(尝试再次清除缓存以进行kick)。这与此实体有关吗?你能把整个实体的源代码粘贴到你的问题中吗?我明白了,当然,这同样适用于你所有的条令注释-@entity
到@ORM\entity
,@Table
到@ORM\Table
,等等…现在明白了:[document\ORM\MappingException]类“entity\WatchNotify”“XY\Doctrine\Entity”的子类不是有效的实体或映射的超类。
我怀疑是因为它不再将实体视为实体,因为@ORM\前缀导致注释无法工作。从表和实体中删除@ORM\确实解决了这一问题,并使我返回到以前的错误,因此我怀疑这与缺少@ORM\无关。我注意到,通过删除@Id,它会抱怨实体需要标识符/主键。所以我认为语法是正确的,只需要弄清楚为什么在持久化之前它不会自动生成数字。
use Doctrine\ORM\Mapping as ORM;
...
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
*/
protected $id;