未能找到合适的答案,我在这里发布。尽管这个消息没什么意义,因为在这里没有被称为id的引用列。Symfony 2引用的列名称ID必须是主键列
我参考了一个现有的OpenCart 1.5数据库,但是引用了Symfony 2 CRM的特定附加实体。在这种情况下,映射是非常棘手的,但有一个我不明白。
- 被引用的列名“ID”必须是对目标实体类“的appbundle \实体\ Oc49Language”一主键列。
Oc49Language是现有Opencart的实体,但是只有language_id
没有列称为id
, - 并且在实体本身,也没有任何映射没有提及id
。
这里的Oc49Language
实体:
/**
* Oc49Language
*
* @ORM\Table(name="oc49_language", indexes={@ORM\Index(name="name", columns={"name"})})
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\Oc49LanguageRepository")
*/
class Oc49Language
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=32, nullable=false)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="code", type="string", length=5, nullable=false)
*/
private $code;
/**
* @var string
*
* @ORM\Column(name="locale", type="string", length=255, nullable=false)
*/
private $locale;
/**
* @var string
*
* @ORM\Column(name="image", type="string", length=64, nullable=false)
*/
private $image;
/**
* @var string
*
* @ORM\Column(name="directory", type="string", length=32, nullable=false)
*/
private $directory;
/**
* @var string
*
* @ORM\Column(name="filename", type="string", length=64, nullable=false)
*/
private $filename;
/**
* @var integer
*
* @ORM\Column(name="sort_order", type="integer", nullable=false)
*/
private $sortOrder;
/**
* @var boolean
*
* @ORM\Column(name="status", type="boolean", nullable=false)
*/
private $status;
/**
* @var ArrayCollection
*
* @ORM\ManyToMany(targetEntity="\AppBundle\Entity\Species", inversedBy="languageName")
*/
private $species;
/**
* @var integer
*
* @ORM\Column(name="language_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $languageId;
/**
* Constructor
*/
public function __construct()
{
$this->species = new ArrayCollection();
}
.... etc.
试图验证时,我也是在控制台中看到一个ORMException消息:
列名
id
的关系走向的appbundle引用从 的appbundle \实体\ Oc49Language \实体\物种确实不存在 。
这是真的 - 它不存在;但也没有提及它!
我在这里错过了一些非常明显的东西,还是更复杂一点?这是我试图解决的所有错误中的最后一个,但是这个确实令我困惑,所以任何帮助表示赞赏。
编辑:根据要求,这是种实体:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Species
*
* @ORM\Table(name="species")
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\SpeciesRepository")
*/
class Species
{
/**
* @var string
*
* @ORM\Column(name="name", type="string", length=45, nullable=true)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="note", type="text", nullable=true)
*/
private $note;
/**
* @var integer
*
* @ORM\Column(name="language_id", type="text", nullable=false)
*/
private $languageId;
/**
* @var \AppBundle\Entity\Oc49Language
*
* @ORM\OneToMany(targetEntity="\AppBundle\Entity\Oc49Language", mappedBy="species")
*/
private $languageName;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Breed", mappedBy="species")
*/
private $breed;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Pet", inversedBy="species")
*/
private $pet;
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Illness", mappedBy="species")
*/
private $illness;
/**
* Constructor
*/
public function __construct()
{
$this->breed = new ArrayCollection();
$this->pet = new ArrayCollection();
$this->illness = new ArrayCollection();
}
...
}
这不是问题 - 如果你看过我发布的代码,你会看到主键是ca lled'language_id' - 我试图找出它所声称的引用列名称实际上是一个问题。 –
你可以发布实体AppBundle \ Entity \ Species吗?您可能已将映射列指定为Id,而不是languageId – progg
已将此问题添加到问题中,谢谢 –