0

Doctrineのcasecade機能を使用して2つのエンティティ間の関係を自動的に保存しようとしましたが、機能していないようです。

ここでデモを作成しました:https ://github.com/asakurayoh/demo_bug_doctrine そこで、ドクトリンフィクスチャを使用してデモを作成します。データベースを作成し(app / console doctrine:database:create)、テーブルを移行し(app / console doctrine:migrations:migrate)、次にフィクスチャをロードする(app / console doctrine:fixtures:load)必要があります。3番目のフィクスチャ(src / Demo / MyBundle / DataFixtures / ORM / TagsNewsFixtures.php)は、すべてのニュースにすべてのタグエンティティを追加しています。データベースにアクセスすると、news_tagテーブルにリレーションが保存されていないことがわかります...私のリレーションはマッピング(Resources / config / doctrine / News.orm.ymlおよびTag.orm)で明確に定義されていると思います。 yml)およびcascadeプロパティが設定されます。

誰かがこのコードの問題を見つけることができますか?私はどこでも検索し(stackoverflowも)、みんなが言ったすべてのことをしました...それはうまくいくはずです...

私の命を救ってくれてありがとう(そして私の実体関係、ハ!)

AsakuraYoh

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」プロパティはニュース側にある必要があり、ニュースはMappedBy(タグ)ではなく「inversedBy」プロパティを使用します。だからそれは動作します。そして、ニュースをタグに追加するには(逆の操作を行います)、Tagエンティティでタグをニュースに追加するように指定する必要があります...Doctrineがデフォルトでそれを行わない理由がわかりません...変...

于 2013-03-27T18:54:48.527 に答える