2012-04-20 14 views
0

私はDoctrine2 + CodeIgniter2を使用しており、結合テーブルの簡単なテストを作成しようとしています。ここでdoctrineエンティティで外部キーを挿入していますか?

が関与する2つのテーブルのための私のスキーマです:

は表test_lastnamesをCREATE ENGINE = InnoDBは(IDのINTのAUTO_INCREMENT、NOT NULL、 VARCHAR(255)NOT NULLと、PRIMARY KEY(ID)をLAST_NAME)。

表test_firstnamesを作成する(、IDのINTのAUTO_INCREMENT NULL NOT mylastname_id intデフォルトのNULLを、FIRST_NAME VARCHAR(255)NOT NULL、 INDEX IDX_23D7305696EC0FA4(mylastname_id)、PRIMARY KEY(ID))ENGINE = のInnoDB。

のALTER TABLE test_firstnamesは、私がしようとしています

ORM\Testing\Firstnames: 
    type: entity 
    table: test_firstnames 
    fields: 
    id: 
     type: integer 
     id: true 
     generator: 
     strategy: AUTO 
    firstname: 
     type: string 
     column: first_name 
    manyToOne: 
    mylastname: 
     targetEntity: ORM\Testing\Lastnames 

ORM\Testing\Lastnames: 
    type: entity 
    table: test_lastnames 
    fields: 
    id: 
     type: integer 
     id: true 
     generator: 
     strategy: AUTO 
    lastname: 
     type: string 
     column: last_name 

CONSTRAINT FK_23D7305696EC0FA4 FOREIGN KEY(mylastname_id)REFERENCESのtest_lastnames(ID)ここで

は私のYAMLマッピングされているを追加しますテーブルにデータを書き込む。

$new_lastname = new ORM\Testing\Lastnames; 
$new_lastname -> setLastName ('Shakespear'); 
$this->doctrine->em->persist($new_lastname); 
$this->doctrine->em->flush(); 

$new_firstname = new ORM\Testing\Firstnames; 
$new_firstname->setFirstname('William'); 
$new_firstname->setMyLastName($new_lastname ->getID()); 
$this->doctrine->em->persist($new_firstname); 
$this->doctrine->em->flush(); 

それは以下のエラーを返す:

メッセージ:引数1はORM \テスト\ Firstnamesに渡さ:: setMylastname()と呼ばれる、ORM \テスト\ Lastnames、指定された整数のインスタンスでなければなりません/[PATH]/applicationFolder/controllers/testing/test_namejoins_insert.phpで

ファイル名ライン31上と定義された:テスト/ Firstnames.php

行番号:66

Message: spl_object_hash() expects parameter 1 to be object, integer givenのエラーだけでなく、ここで

はFirstnames.phpから66行です:public function setMylastname(\ORM\Testing\Lastnames $mylastname = null)

私はそれでハッキングを開始していない - '$ mylastname = NULL' で右が問題でしょうか?

エンティティによって外部キー値を挿入するにはどうすればよいですか?

答えて

0
$new_firstname->setMyLastName($new_lastname); 

ではなく$new_firstname->setMyLastName($new_lastname ->getID());

関連する問題