[我正在使用@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
Flight.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;
}
Airport.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;
我看不出在机场类中放置oneToMany注释,甚至在航班类中保留inbounf和outbound属性的任何用处,但只要保持航班类别中的from and to,那么您访问机场中的任何属性都会抛出航班实体您的代码应如下所示:
Flight.php:
class Flight{/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Airport")
* @ORM\JoinColumn(name="airportFrom" , referencedColumnName="id")
*/
private $from;
/**
* @ORM\ManyToOne(targetEntity="Airport")
* @ORM\JoinColumn(name="airportTo", referencedCol)
*/
private $to;
Airport.php
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;
并且如果您担心如何获得从机场进出的航班,则可以使用简单的SQL查询来完成