2012-04-20 3 views
0

Я использую Doctrine2 + CodeIgniter2 и пытаюсь создать простой тест таблицы соединений.Вставка внешнего ключа через объект доктрины?

Вот моя схема для двух таблиц, участвующих:

CREATE TABLE test_lastnames (ID INT NOT NULL AUTO_INCREMENT, last_name VARCHAR (255) NOT NULL, PRIMARY KEY (ID)) ENGINE = InnoDB;

CREATE TABLE test_firstnames (ID INT NOT NULL AUTO_INCREMENT, mylastname_id INT DEFAULT NULL, то first_name VARCHAR (255) NOT NULL, ИНДЕКС IDX_23D7305696EC0FA4 (mylastname_id), первичный ключ (ID)) ДВИГАТЕЛЬ = ЬшоВВ;

ALTER TABLE test_firstnames ADD CONSTRAINT FK_23D7305696EC0FA4 ИНОСТРАННОЙ КЛЮЧ (mylastname_id) ссылки test_lastnames (ID)

Вот мои YAML отображения

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 

Я пытаю для записи данных в таблицы.

$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 \ Testing \ Firstnames :: setMylastname() должен быть экземпляром ORM \ Testing \ 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 ошибок.

Вот строка 66 из Firstnames.php: public function setMylastname(\ORM\Testing\Lastnames $mylastname = null)

Я еще не начал взлома на него - это проблема там с '$ mylastname = нуль?

Как вставить значение внешнего ключа сущностью?

ответ

0
$new_firstname->setMyLastName($new_lastname); 

вместо $new_firstname->setMyLastName($new_lastname ->getID());

Смежные вопросы