使用Symfony 2.2和Doctrine 2.2.*我可以';不要用cascade保存太多的关系:坚持

使用Symfony 2.2和Doctrine 2.2.*我可以';不要用cascade保存太多的关系:坚持,symfony,doctrine-orm,save,relation,Symfony,Doctrine Orm,Save,Relation,我尝试使用Doctrine casecade功能自动保存两个实体之间的关系,但它似乎不起作用 我在这里做了一个演示: 所以我使用条令装置来制作我的演示。 您需要创建de数据库(应用程序/控制台原则:数据库:创建),迁移表(应用程序/控制台原则:迁移:迁移),然后加载装置(应用程序/控制台原则:装置:加载)。第三个fixture(src/Demo/MyBundle/DataFixtures/ORM/tagsnewsixtures.php)将所有标记实体添加到所有新闻中。如果你转到数据库,你会看到没

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

我在这里做了一个演示: 所以我使用条令装置来制作我的演示。 您需要创建de数据库(应用程序/控制台原则:数据库:创建),迁移表(应用程序/控制台原则:迁移:迁移),然后加载装置(应用程序/控制台原则:装置:加载)。第三个fixture(src/Demo/MyBundle/DataFixtures/ORM/tagsnewsixtures.php)将所有标记实体添加到所有新闻中。如果你转到数据库,你会看到没有任何关系保存在news_tag表中。。。我认为我的关系在映射(Resources/config/doctrine/News.orm.yml和Tag.orm.yml)中定义得很好,并且设置了cascade属性

有人能找到这个代码的问题吗?我到处搜索(stackoverflow也是),我做了每个人说的每件事。。。它应该有用

谢谢你救了我的命(还有我的关系,哈!)


AsakuraYoh

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

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
    }
}
我发现了问题。
“joinTable”属性必须位于News端,News使用“inversedBy”属性,而不是MappedBy(这是标记)。所以它起作用了。要将新闻添加到标记中(然后做相反的操作),我们需要在标记实体中指定将标记添加到新闻中。。。我不明白为什么条令在默认情况下不这么做。。。奇怪…

I jsut验证这一点,并且我的装置按此顺序加载(在我的情况下):1。新闻周刊,2。三,。TagNewsFixtures。。。我在TagNewsFixture中转储新闻和标记的值,以确保。。。不是这样的…为了安全起见,我已经将OrderedFixtureInterface添加到我的fixture中并设置了顺序,但在我的服务器上,顺序已经正确了。我使用的方法与这里显示的方法相同(抱歉,法语):但我找到的每个教程中的内容都是一样的。你能提供一个这种行为的测试用例吗(如果确认,映射验证通过)将其发布到?