4

私は数ヶ月前に symfony を使い始めましたが、いつも私を悩ませていることが 1 つあります。Doctrine で 1 対多の関係があり、データベースに何かを挿入しようとしたときです。次に例を示します。

Broker.orm.yml

Acme\DemoBundle\Entity\Broker:
    type: entity
    table: brokers
    repositoryClass: BrokerRepository
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        name:
            type: string
            length: 255
        slug:
            type: string
            length: 64
    oneToMany:
        accountTypes:
            targetEntity: Acme\DemoBundle\Entity\AccountType
            mappedBy: broker
            cascade: ["persist"]

AccountType.orm.yml

Acme\DemoBundle\Entity\AccountType:
    type: entity
    table: account_types
    repositoryClass: AccountTypeRepository
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        name:
            type: string
            length: 255
        slug:
            type: string
            length: 64
    manyToOne:
        broker:
            targetEntity: Acme\DemoBundle\Entity\Broker
            inversedBy: accountTypes
            joinColumn:
                name: broker_id
                referencedColumn: id

次に、このようにデータベースに保存しようとします。

$accountType = new AccountType();
$accountType->setName("blabla");
// additional data to accountType

$broker->addAccountType($accountType);

$em->persist($broker);
$em->flush();

奇妙なことは、たった 1 つの小さな問題で正しく動作することです。Broker が更新され、AccountType がデータベースに挿入されますが、accountType は Broker とは何の関係もありません。言い換えれば、データベースをチェックインすると、broker_idフィールドはそのまま残り、含まれていますNULL

$accountType->setBroker($broker)手動で追加すると機能します。しかし、これを行うにははるかに複雑な Sonata Admin Bundle を使い始めました。複雑な管理システムは実際には必要ありません。だから私はそれを迅速に開発したいだけで、この「機能」がなければほとんど不可能です.

とにかく、オブジェクトのコレクションに何かを追加すると、どのオブジェクトがその親であるかを知る必要がありますよね? :)

事前にご協力いただきありがとうございます。

4

1 に答える 1