Symfony 7 - 学说 - 数据装置 - 违反完整性约束

问题描述 投票:0回答:1

我在数据库中获取示例数据时遇到问题。

共有三个实体:

  • 书籍
  • 书籍类
  • 图书目标

从 Books 到 BookKind 存在 OnToOne 关系,从 Books 到 BooksTarget 存在 ManyToMany 关系

还有三个夹具文件:

  • aTargetFixtures
  • bKindFistures
  • cBooks 装置
    (我不知道 DependentFixtureInterface,这就是文件有 a、b、c 的原因)。

如果我执行

symfony console doctrine:fixture:load
我收到以下错误:

在 ExceptionConverter.php 第 62 行:

执行查询时发生异常:SQLSTATE[23000]:违反完整性约束:1062 键“UNIQ_4A1B2A9230602CA9”的重复条目“23”

在 Exception.php 第 28 行: > SQLSTATE[23000]:违反完整性约束:1062 键“UNIQ_4A1B2A9230602CA9”的重复条目“23”

在Statement.php第130行:
SQLSTATE[23000]:违反完整性约束:1062 键“UNIQ_4A1B2A9230602CA9”的重复条目“23”

学说:夹具:加载[--append] [--group GROUP] [--em EM] [--purger PURGER] [--purge-exclusions PURGE-EXCLUSIONS] [--purge-with-truncate]

我做了一些挖掘并意识到,如果 cBooksFixture 只有带有两个目标的书籍,则一切正常。

一旦我添加一本只有一个目标的书,我就会收到上面的错误。

作品:

$book1 = new Books();
        $book1->setTitle('Santa Claus\'s Story Time - 24 Magical Tales and Activities for Advent Nights: An activity advent calendar for kids aged 8 - 12');
        $book1->setShortDescription('Christmas is the most magical time of year, and with Santa Claus\'s Story Time - 24 Magical Tales and Activities for Advent Nights, your child will experience the joy of counting down to Christmas like never before!<br /><br />Each night in December, cozy up with your little one as they unlock a special surprise: 24 days filled with festive stories and fun activities. From whimsical coloring pages and playful word searches to delightful puzzles, every day is packed with excitement! It’s the perfect way to add a sprinkle of Christmas cheer to their holiday routine.');
        $book1->setPrice(650);
        $book1->setReleaseDate(new \DateTime('2024-09-13'));
        $book1->setAmazonLink('https://www.amazon.com/dp/B0DH4BHFNW');
        $book1->setCoverLink('https://m.media-amazon.com/images/I/71PoNGy4J4L._SL1293_.jpg');
        $book1->setFeatured(false);
        $book1->addTarget($this->getReference('target'));
        $book1->addTarget($this->getReference('target2'));
        $book1->setKind($this->getReference('kind1'));
        $book1->setLang('en');
        $book1->setCurrency('us');
        $manager->persist($book1);

不起作用:

$book3 = new Books();
        $book3->setTitle('Zauberhafte Tierkinder - Entspannungskunst für Erwachsene: Ausmalbuch für Erwachsene mit interessanten Fakten, Malbuch, Geschenk zur Entspannung, Tierbabies');
        $book3->setShortDescription('Tauchen Sie ein in die zauberhafte Welt der Tierkinder! Das Buch Zauberhafte Tierkinder - Entspannungsbuch für Erwachsene entführt Sie mit 30 liebevoll gestalteten Illustrationen von Babytiere in eine Welt voller Entspannung und Kreativität.');
        $book3->setPrice(650);
        $book3->setReleaseDate(new \DateTime('2024-08-02'));
        $book3->setAmazonLink('https://www.amazon.de/dp/B0DC5K5JKN');
        $book3->setCoverLink('https://m.media-amazon.com/images/I/71kxwKaygOL._SL1000_.jpg');
        $book3->setFeatured(true);
        $book3->addTarget($this->getReference('target1'));
        $book3->setKind($this->getReference('kind'));
        $book3->setLang('de');
        $book3->setCurrency('euro');
        $manager->persist($book3);

这是因为多对多关系吗?我很困惑,因为我认为我也只能使用ManyToMany在一本书和目标之间建立一个关系,例如。 g。独角兽着色书仅适用于目标儿童,但可爱的动物适用于目标青少年和成人。

我做错了什么?

doctrine-orm symfony7
1个回答
0
投票

我明白了。

问题不在于 targetReferences,而在于 kindReferences,因为我在 books 和 booksKind 之间建立了 OneToOne 关系。 我的印象是这意味着一本书可以有一种,但事实并非如此。

在我将书籍和书籍类型之间的关系更改为ManyToOne之后,现在一切都按预期进行。

© www.soinside.com 2019 - 2024. All rights reserved.