У меня есть два объекта - магазин и продукт. В одном магазине может быть много продуктов, но на одном продукте всегда есть только один магазин.
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
. Что не так?
Вероятно, вам нужно ссылаться на поле shopId
в вашем объекте Product. Также обратите внимание, что вы должны использовать имена объектов сущностей, а не имена столбцов в таблице DB.
/**
* @ORM\ManyToOne(targetEntity="Shop", inversedBy="products")
* @ORM\JoinColumn(name="shop_id", referencedColumnName="shopId")
*/
private $shop;
PS Для проблем с отображением Symfony command doctrine:schema:validate
может быть полезна.
shop_Id
это не должно ссылаться на shop_Id
?
shop_id
??
У вас нет столбца product_id в таблице магазина. Я думаю, что имя вашего имени shop_id также может вызывать конфликт с значением referenceColumnName. Поэтому измените имя столбца id магазина только на Id.
Затем измените значение referenceColumnName на идентификатор (магазины).
/**
* @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;
Product
?