私は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' で右が問題でしょうか?
エンティティによって外部キー値を挿入するにはどうすればよいですか?