Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令2由于缺少ID而无法插入_Php_Mysql_Doctrine Orm - Fatal编程技术网

Php 条令2由于缺少ID而无法插入

Php 条令2由于缺少ID而无法插入,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,在尝试使用Doctrine 2的persist flush方法进行插入时,我根本无法实现这一点。元数据被设置为生成一个值(我尝试了自动和标识,但没有成功),但它仍然不是自动递增的。我还注意到,在数据库的模式中,“id”列也没有设置为自动递增。该实体不包含预/后持久化函数 XXXX类型的实体缺少为字段“ID”分配的ID。此实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果希望自动生成标识符,则需要相应地调整元数据映射 我想知道是否有人对此有任何见解,

在尝试使用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;