【发布时间】:2017-05-15 21:06:58
【问题描述】:
我是 Symfony 的新手,正在尝试设置实体和关系。即使我似乎正确地注释了主键。
运行时
php bin/控制台原则:schema:validate
我收到如下错误:
引用的列名“brandId”必须是目标实体类“AppBundle\Entity\Brands”上的主键列。
实体看起来像(仅相关部分):
谢谢
品牌
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table(name="brands")
*/
class Brands
{
/**
* @ORM\Id
* @ORM\Column(type="smallint",length=3,unique=true,options={"unsigned":true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $brandId;
/**
* one brands has many models
* @ORM\OneToMany(targetEntity="Models", mappedBy="brandId")
* @ORM\JoinColumn(name="brandId", referencedColumnName="brandId")
*/
private $models;
public function __construct()
{
$this->models = new ArrayCollection();
}
型号:
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="AppBundle\Repository\ModelsRepository")
* @ORM\Table(name="models")
*/
class Models
{
/**
* @ORM\Column(type="smallint",length=4,unique=true,options={"unsigned":true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $modelId;
/**
* @ORM\Column(type="string", length=25)
*/
private $model;
/**
* Many models for one brand
* @ORM\ManyToOne(targetEntity="Brands",inversedBy="models")
* @ORM\JoinColumn(name="brandId", referencedColumnName="brandId")
*/
private $brandId;
【问题讨论】:
-
只需按照这里的示例:docs.doctrine-project.org/projects/doctrine-orm/en/latest/… 修复关系后,将 Model::brandId 更改为 Model::brand
-
@Cerad。谢谢,但为什么我要包括 ::brand 这是品牌名称的字段(如福特、宝马等)?它当然不会推动(双关语)任何关系。
-
因为品牌是品牌对象。 brandId 只是唯一标识符。对于 Doctrine 2,请尝试根据对象而不是数据库列名来思考。
标签: php entity-framework symfony doctrine-orm orm