php - @ORM\ManyToOne(试图将对象而不是 int 值填充到列中的学说)
问题描述
我正在使用@ORM\ManyToOne
关联来处理表单,但 Doctrine 一直在尝试解析 Airport Entity 而不是 Airport Entity 的 id,我尝试了几个注释,例如@ORM\JoinColumn(name="id", referencedColumnName="id")
但我找不到正确的注释来进行教义解析实体的 id 而不是实体对象,任何帮助将不胜感激。另外,我不是在寻求快速而肮脏的解决方案,而是在寻求一种干净而正确的方法,如果可能的话,使用 Doctrine 注释来做到这一点。
完整的错误信息:
An exception occurred while executing 'INSERT INTO flight (from, to) VALUES (?, ?)' with params [{}, {}]:
Notice: Object of class App\Entity\Airport could not be converted to int
飞行.php
/**
* @ORM\Entity(repositoryClass="App\Repository\FlightRepository")
* @ORM\Table(name="flight",
* uniqueConstraints={@ORM\UniqueConstraint(name="flight",columns={"from","to"})}
* )
*/
class Flight
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Airport", inversedBy="outbound")
* @ORM\JoinColumn(name="id")
*/
private $from;
/**
* @ORM\ManyToOne(targetEntity="Airport", inversedBy="inbound")
* @ORM\JoinColumn(name="id")
*/
private $to;
public function __toString()
{
return $this->name;
}
机场.php
/**
* @ORM\Entity(repositoryClass="App\Repository\AirportRepository")
*/
class Airport
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\Column(type="string", length=200)
*/
private $region;
/**
* @ORM\OneToMany(targetEntity="Flight", mappedBy="to")
*/
private $inbound;
/**
* @ORM\OneToMany(targetEntity="Flight", mappedBy="from")
*/
private $outbound;
解决方案
通过与 Jakumi 聊天,我终于发现问题出在@ORM\ManyToOne()
一边:
这@ORM\JoinColumn()
会将实体转换为 int。他还指出from
是 MySQL 中的保留关键字,所以我将列名更改为ap_from
.
飞行.php
/**
* @ORM\Entity(repositoryClass="App\Repository\FlightRepository")
* @ORM\Table(name="flight",
* uniqueConstraints={@ORM\UniqueConstraint(name="flight",columns={"ap_from","ap_to"})}
* )
*/
class Flight
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Airport", inversedBy="outbound")
* @ORM\JoinColumn(name="ap_from", referencedColumnName="id")
*/
private $from;
/**
* @ORM\ManyToOne(targetEntity="Airport", inversedBy="inbound")
* @ORM\JoinColumn(name="ap_to", referencedColumnName="id")
*/
private $to;
/**
* @ORM\Column(type="text")
*/
private $kfm;
推荐阅读
- java - 为 Jackson 自定义反序列化程序抛出带有 HTTP 状态代码的自定义异常
- python - 微信评论页面有链接,但是抓包软件和get请求获取的内容不一样
- arrays - 合并来自多个工作表的表
- arrays - 从 Bash 中的标准输入文件动态填充两个数组
- android - 画布不在 SurfaceView 中绘制
- maven - 存储库测试单独运行但整体失败(mvn 测试)
- django - django 管理员重定向我无法连接
- asp.net - 如何将授权用户从一个应用程序传递到在同一服务器上运行的另一个应用程序?
- http - superagent 访问控制允许来源错误
- java - 以 JSON 格式保存 API 返回的图像