我有两个实体 - 商店和产品。一个商店可以有很多产品,但一个产品总是只有一个商店。
class Shop {
/**
* @var integer
*
* @ORM\Column(name="shop_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $shopId;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*
* @ORM\OneToMany(targetEntity="Product", mappedBy="shop")
*/
private $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
}
class Product {
/**
* @var integer
*
* @ORM\Column(name="product_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $productId;
/**
* @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
* @ORM\JoinColumn(name="shop_id", referencedColumnName="product_id")
*/
private $shop;
}
当我运行网站时,我收到通知错误,即product_id是vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 1778
中未定义的索引。怎么了?
答案 0 :(得分:1)
您可能需要在Product实体中引用shopId
字段。另请注意,您应该使用实体属性'名称,而不是数据库表中列的名称。
/**
* @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
* @ORM\JoinColumn(name="shop_id", referencedColumnName="shopId")
*/
private $shop;
P.S。对于映射问题,Symfony命令doctrine:schema:validate
可能很有用。
答案 1 :(得分:0)
商店表中没有product_id列。我认为你的shop_id列名也可能导致与referenceColumnName值冲突。因此,将商店ID列名称更改为Id。
然后将referenceColumnName更改为just(商店)id。
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $shopId;
/**
* @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
* @ORM\JoinColumn(name="shop_id", referencedColumnName="id")
*/
private $shop;