2013-03-26 86 views
0

我尝试使用Doctrine casecade功能tu automagicaly保存两个实体之间的关系,它似乎并没有工作。随着Symfony 2.2和Doctrine 2.2。*我不能保存manytoMany关系与级联:persist

我在这里做了一个演示:https://github.com/asakurayoh/demo_bug_doctrine 所以我使用doctrine夹具来制作演示。 你需要创建de数据库(app/console doctrine:database:create),迁移表格(app/console doctrine:migrations:migrate),然后加载fixtures(app/console doctrine:fixtures:load)。第三个灯具(src/Demo/MyBundle/DataFixtures/ORM/TagsNewsFixtures.php)将所有标签实体添加到所有新闻中。如果你进入数据库,你会发现没有关系保存在news_tag表中......我想我的关系在我的映射(Resources/config/doctrine/News.orm.yml和Tag.orm。 yml),并设置cascade属性。

有人可以找到这个代码的问题?我搜索无处不在(计算器太)和我已经做了所有的事情大家都在说...它应该工作...

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

AsakuraYoh

回答

0

我发现了这个问题。 “joinTable”属性需要在News一侧,而新闻使用“inversedBy”属性,而不是MappedBy(这是标签)。所以它工作。然后为标签添加新闻(做相反的事情),我们需要在标签实体中指定将标签添加到新闻中......我不明白为什么Doctrine默认不会这么做......奇怪...

+0

能否请您提供一个测试用例的这种行为,(如果得到证实,与映射验证通过)邮寄到http://www.doctrine-project.org/jira/browse/DDC? – Ocramius 2013-03-29 12:22:41

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 
    } 
} 
+0

我仅仅指刚验证这一点,我的灯具顺序加载(对我来说):1. NewsFixture,2 TagFixtures,3 TagNewsFixtures ......我倾倒的新闻和标签中的价值我TagNewsFixture是的......所以这是不是... ... – 2013-03-26 17:23:35

+0

如果我没有记错的话,他们按字母顺序加载... – 2013-03-26 17:30:50

+0

我以前做的OrderedFixtureInterface添加到我的夹具和设置的顺序,刚需安全,但在我的服务器上,订单已经正确。 – 2013-03-26 17:36:29