3

knowledgeAreaDoctrine を使用して永続化される次のクラスがありますが、属性ではなくオブジェクトであるため、knowledgeLevel属性を挿入したくありません。

これらのオブジェクトを挿入するのではなく、それらを参照する属性のみを挿入するにはどうすればよいですか?

:私はDoctrineを学んでいます。何か間違ったことをしていると思いますが、よくわかりません。そして、私はMySQLを使用しています。

class Knowledge {

    /** @Id @Column(name="id", type="bigint") @generatedValue(strategy="AUTO") **/    
    private $id;

    /** @Column(name="name", type="string") **/
    private $name;

    /** @Column(name="description", type="text") **/
    private $description;

    /** @Column(name="exibition_order", type="integer") **/
    private $exibitionOrder;

    /**         
    * @ManyToOne (targetEntity="KnowledgeArea", inversedBy="knowledges")
    * @JoinColumn(name="knowledge_area_id", referencedColumnName="id")
    **/
    private $knowledgeArea; #this is an object

    /** 
    * @ManyToOne (targetEntity="KnowledgeLevel", inversedBy="knowledges")
    * @JoinColumn(name="knowledge_level_id", referencedColumnName="id")    
    **/
    private $knowledgeLevel; #this is an object
4

1 に答える 1

2

それで、あなたが持っている問題は、外部キー関係をどのように設定するかということのように思われますか?典型的な方法は、参照を使用することです。例としてSymfony2コントローラーの内部には次のものがあります。

$em = $this->getDoctrine()->getEntityManager();
$knowledge = new Knowledge();
$knowledge->setKnowledgearea($em->getReference('AcmeBundle:Knowledges', 3));

他のフレームワークを使用している場合は、教義のentitymanagerオブジェクトが必要ですが、考え方は同じです。

これはここに文書化されています。

于 2012-05-23T01:24:30.940 に答える