Symfony 2.7.2.Doctrine ORM 2.4.7.MySQL 5.6.12.PHP 5.5.0.
我有一个具有自定义ID生成器策略的实体.它完美无瑕.
在某些情况下,我必须用"手工制作"ID覆盖此策略.它在主要实体被刷新而没有关联时起作用.但它不适用于协会.抛出此示例错误:
使用params ["a004r0",4]执行'INSERT INTO articles_tags(article_id,tag_id)VALUES(?,?)'时发生异常:
SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(
sf-test1.articles_tags,CONSTRAINTFK_354053617294869CFOREIGN KEY(article_id)REFERENCESarticle(id)ON DELETE CASCADE)
以下是如何重现:
app/config/parameters.yml使用数据库参数进行编辑.使用示例AppBundle命名空间,在目录中创建Article和Tag实体src/AppBundle/Entity.
<?php
// src/AppBundle/Entity/Article.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="article")
*/
class Article
{
/**
* @ORM\Column(type="string")
* @ORM\Id
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="AppBundle\Doctrine\ArticleNumberGenerator")
*/
protected $id;
/**
* @ORM\Column(type="string", length=255)
*/
protected $title; …Run Code Online (Sandbox Code Playgroud)我正在使用Symfony2和Doctrine,我正在使用Alice Fixture包生成我的灯具进行测试.
在一种情况下,我需要创建一个夹具,其中id为148,用于特定测试.我们所有的id都配置为auto_increment,所以我目前正在创建147个虚拟记录,只是为了创建我需要的记录.
我希望使用此定义强制将id设置为148:
invoiceClassNoClass (extends invoiceClass):
id: 148
sortOrder: 1
label: 'No Class'
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.从谷歌搜索我读了一个简短的评论,说我首先需要添加一个setId方法到我的实体.我试过了,但没有什么区别.实际上,如果我不需要,我不想添加为setId方法,因为它违反了我们永远不允许设置id的完整性规则.
也许有可以使用的反射类?也许这是爱丽丝的内置而我不知道呢?