通过学说实体插入外键?

时间:2012-04-20 18:03:39

标签: php foreign-keys doctrine-orm entity

我正在使用Doctrine2 + CodeIgniter2,并且我正在尝试创建一个简单的连接表测试。

以下是我所涉及的两个表的架构:

  

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

     

CREATE TABLE test_firstnames(id INT AUTO_INCREMENT NOT NULL,   mylastname_id INT DEFAULT NULL,first_name VARCHAR(255)NOT NULL,   INDEX IDX_23D7305696EC0FA4(mylastname_id),PRIMARY KEY(id))ENGINE =   InnoDB的;

     

ALTER TABLE test_firstnames ADD CONSTRAINT FK_23D7305696EC0FA4 FOREIGN   KEY(mylastname_id)REFERENCES 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行和定义

     

文件名:Testing / 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'吗?

如何按实体插入外键值?

1 个答案:

答案 0 :(得分:1)

$new_firstname->setMyLastName($new_lastname);

而不是$new_firstname->setMyLastName($new_lastname ->getID());