私は数ヶ月前に 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 を使い始めました。複雑な管理システムは実際には必要ありません。だから私はそれを迅速に開発したいだけで、この「機能」がなければほとんど不可能です.
とにかく、オブジェクトのコレクションに何かを追加すると、どのオブジェクトがその親であるかを知る必要がありますよね? :)
事前にご協力いただきありがとうございます。