Php 通过实体插入外键?

Php 通过实体插入外键?,php,foreign-keys,doctrine-orm,entity,Php,Foreign Keys,Doctrine Orm,Entity,我正在使用Doctrine2+CodeIgniter2,并试图创建一个简单的连接表测试 以下是我对涉及的两个表的模式: 创建表test\u lastnames(id INT AUTO\u INCREMENT NOT NULL,last\u name VARCHAR(255)不为空,主键(id))引擎=InnoDB 创建表test_firstnames(id INT AUTO_INCREMENT NOT NULL, mylastname\u id INT默认为NULL,first\u name V

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

以下是我对涉及的两个表的模式:

创建表test\u lastnames(id INT AUTO\u INCREMENT NOT NULL,last\u name VARCHAR(255)不为空,主键(id))引擎=InnoDB

创建表test_firstnames(id INT AUTO_INCREMENT NOT NULL, mylastname\u id INT默认为NULL,first\u name VARCHAR(255)不为NULL, 索引IDX_23D7305696EC0FA4(mylastname_id),主键(id))引擎= InnoDB

ALTER TABLE test_firstnames添加约束FK_23D7305696EC0FA4外部 键(mylastname\u id)引用测试\u LastName(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

我正在尝试将数据写入表中

$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();
它返回以下错误:

消息:传递给ORM\Testing\Firstnames::setMylastname()的参数1必须是ORM\Testing\Lastnames的实例,给定整数,在第31行的/[PATH]/applicationFolder/controllers/Testing/test\u namejoins\u insert.php中调用并定义

文件名:Testing/Firstnames.php

电话号码:66

还有一堆
消息:spl\u object\u hash()期望参数1是object,给定
错误的整数

下面是Firstnames.php的第66行:
公共函数setMylastname(\ORM\Testing\Lastnames$mylastname=null)

我还没有开始破解它,“$mylastname=null”是否存在问题

如何按实体插入外键值?

而不是
$new\u lastname->setMyLastName($new\u lastname->getID())

$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();
$new_firstname->setMyLastName($new_lastname);