相关疑难解决方法(0)

覆盖默认标识符生成策略对关联没有影响

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,CONSTRAINT FK_354053617294869CFOREIGN KEY(article_id)REFERENCES article(id)ON DELETE CASCADE)

以下是如何重现:

  1. 安装并创建Symfony2应用程序.
  2. app/config/parameters.yml使用数据库参数进行编辑.
  3. 使用示例AppBundle命名空间,在目录中创建ArticleTag实体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)

php oop associations symfony doctrine-orm

8
推荐指数
1
解决办法
1309
查看次数

我可以使用Alice Fixtures覆盖自动增量ID吗?

我正在使用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的完整性规则.

也许有可以使用的反射类?也许这是爱丽丝的内置而我不知道呢?

symfony doctrine-orm nelmio-alice alice-fixtures

7
推荐指数
3
解决办法
3251
查看次数