我的学说版本:v2.6.1
我正在尝试建立关联ManyToOne,我的意思是,很多工作只有一个状态。 在表作业中,我有一个名为“status_id”的列,它通过外键连接到表Status。在类php文件Jobs.php我有:
namespace App\Models\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Models\Entity\Edition;
use App\Models\Entity\Status;
/**
* Class Jobs
* @package App\Models\Entity
* @ORM\Entity
* @ORM\Table(name="jobs")
*/
class Jobs{
/**
* @var int
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
**/
private $id;
(......)
/**
* @var int
* Many Jobs has One Status.
* @ORM\Column(name="status_id")
* @ORM\ManyToOne(targetEntity="Status", inversedBy="jobs")
* @ORM\JoinColumn(name="status_id", referencedColumnName="id")
**/
private $status;
(......)
/**
* @return Jobs
*/
public function getStatus() {
return $this->status;
}
/**
* @param Jobs $status
*/
public function setStatus(Status $status = null){
$this->status = $status;
}
}
显然这里我没有所有类的定义,只插入了我认为相关的内容。 在最后的 setStatus()中,我正在连接另一个名为Status的类,该类位于另一个文件中。
在index.php中我有:
$job = new App\Models\Entity\Jobs();
$job->setName($insertName);
$job->setNotes("");
$job->setSize("30x20x11");
$job->setCustomerRef("");
$job->setEditionId(17);
$status = new App\Models\Entity\Status();
$status->setName("Aprovado");
$job->setStatus($status);
$entityManager->persist($status);
$entityManager->persist($job);
$entityManager->flush();
这给了我一个错误,我知道它在命令flush()中,我做了一些die()来检查它是否给出了错误。 错误如下:
可恢复致命错误:类App \ Models \ Entity \ Status的对象 无法转换为字符串 /home/.../vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php 在第101行
答案 0 :(得分:1)
问题在于您如何映射$status
属性:它使用@ORM\Column
和关联映射,这是一个冲突,使Doctrine将您的状态保存为string
。删除@ORM\Column
注释,你应该没问题。