0

我尝试使用 Doctrine casecade 功能自动保存两个实体之间的关系,但它似乎不起作用。

我在这里做了一个演示:https ://github.com/asakurayoh/demo_bug_doctrine 所以我使用教义夹具来制作我的演示。您需要创建数据库(app/console 学说:数据库:创建),迁移表(应用程序/控制台学说:迁移:迁移),然后加载夹具(应用程序/控制台学说:夹具:加载)。第三个夹具(src/Demo/MyBundle/DataFixtures/ORM/TagsNewsFixtures.php)将所有标签实体添加到所有新闻中。如果你去数据库,你会看到 news_tag 表中没有保存任何关系......我认为我的关系在我的映射(Resources/config/doctrine/News.orm.yml 和 Tag.orm. yml) 并且设置了级联属性。

有人能找到这段代码的问题吗?我到处搜索(也是stackoverflow),我已经完成了每个人都说的一切......它应该工作......

感谢拯救我的生命(和我的实体关系,哈!)

朝仓耀

4

2 回答 2

0

问题在于夹具加载顺序 -TagNewsFixtures首先加载,因此当时数据库中没有标签或新闻。尝试使用 ordere 强制加载顺序

namespace Acme\HelloBundle\DataFixtures\ORM;

use Doctrine\Common\DataFixtures\AbstractFixture;
use Doctrine\Common\DataFixtures\OrderedFixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

class LoadData extends AbstractFixture implements OrderedFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        // ...
    }

    public function getOrder()
    {
        return 1; // the order in which fixtures will be loaded
    }
}
于 2013-03-26T17:17:58.283 回答
0

我发现了问题。“joinTable”属性需要在新闻端,新闻使用“inversedBy”属性,而不是 MappedBy(即标签)。所以它起作用了。并且要将新闻添加到标签(然后做相反的事情),我们需要在 Tag 实体中指定将标签添加到新闻......我不明白为什么 Doctrine 默认不这样做......诡异的...

于 2013-03-27T18:54:48.527 回答