首页 > 解决方案 > @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;

标签: phpsymfonydoctrine

解决方案


通过与 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;

推荐阅读