Отношение «один ко многим» доктрины — «Не указан идентификатор / первичный ключ»

Доктрина терпит неудачу с простыми двунаправленными отношениями «многие к одному» между FoodDes (многие) и FoodGroup (один). Обе сущности показаны здесь:

/**
* @ORM\Entity
* @ORM\Table(name="FOOD_DES")
*/
class FoodDes
{
public function __construct()
{
$this->foodGroup = new ArrayCollection();
}

/**
* @ORM\Id
* @ORM\Column(name="NDB_No", type="string", length=10)
*/
protected $id;

/**
* @ORM\ManyToOne(targetEntity="FoodGroup", inversedBy="fdGroupCode")
* @ORM\JoinColumn(name="FdGrp_Cd", referencedColumnName="FdGrp_CD")
*/
protected $foodGroup;
}

>

/**
* @ORM\Entity
* @ORM\Table(name="FD_GROUP")
*/
class FoodGroup
{

/**
* @ORM\Id();
* @ORM\GeneratedValue(strategy="NONE");
* @ORM\OneToMany(targetEntity="FoodDes", mappedBy="foodGroup")
*/
protected $fdGroupCode;

Когда я запускаю doctrine orm: schema-tool: create, происходит сбой с ошибкой:

Для сущности не указан идентификатор / первичный ключ
«Acme \ Entities \ FoodGroup. Каждый субъект должен иметь
идентификатор / первичный ключ.

Тем не менее, я пометил $ fdGroupCode как мой единственный идентификатор.


Следующий подход

Я также попытался создать новый $ id первичного ключа для сущности FoodGroup и удалить метку первичного ключа из $ fdGroupCode в FoodGroup. Ниже представлена ​​новая сущность FoodGroup.

/**
* @ORM\Entity
* @ORM\Table(name="FD_GROUP")
*/
class FoodGroup
{
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", nullable=false)
*/
protected $id;

/**
* @ORM\OneToMany(targetEntity="FoodDes", mappedBy="foodGroup")
*/
protected $fdGroupCode;

Когда я снова запускаю doctrine orm: schema-tool: create, это приводит к новой ошибке:

[Учение \ ORM \ ORMException] Название колонки FdGrp_CD упоминается для связи с
Acme \ Entities \ FoodDes to Acme \ Entities \ FoodGroup не существует.

Эта ошибка не имеет никакого смысла. Конечно, этого не будет. Я запускаю его с пустой базой данных!

Эти ошибки возникают при запуске из командной строки, но они также возникают при запросе объектов к базе данных. Может кто-нибудь, пожалуйста, помогите мне?

0

Решение

Я бы лучше дал вам рабочий пример OneToMany из одного из моих проектов, чтобы вы могли увидеть разницу и правильно отформатировать код. Если не получится, попробуйте получить новый Symfony расстаться и начать все сначала.

<?php
// SomeBundle/Entity/Shop/Product.php
namespace SomeBundle\Entity\Shop;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="shop_products")
*/
class Product
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="bigint")
*/
protected $id;

/**
* @ORM\OneToMany(targetEntity="ProductItem", mappedBy="product")
*/
protected $productItem;
}

Связанное лицо:

<?php
// SomeBundle/Entity/Shop/ProductItem.php
namespace SomeBundle\Entity\Shop;

use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="shop_products_items")
*/
class ProductItem
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="bigint")
*/
protected $id;

/**
* @ORM\ManyToOne(targetEntity="Product", inversedBy="productItem")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
protected $product;
}

Причин, по которым ваш код не работает, может быть много (пространства имен, структура папок, имена столбцов и т. Д.). Этот пример работает и проверен. Попробуй 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]