Расширяющая сущность Symfony4 не добавляет столбец сущности в схему базы данных - PullRequest
0 голосов
/ 02 апреля 2019

Я занимаюсь разработкой приложения symfony 4.2. У меня есть сущность Meal и OrderItem. У OrderItem должны быть все свойства объекта Meal + несколько его собственных. Проблема в столбце отношений ManyToOne. Не добавляется в таблицу order_item.

https://www.doctrine -project.org / проекты / Доктрина-ОРМ / ы / 2,6 / ссылки / наследования mapping.html Я попытался следовать "Наследование таблиц классов" и "Сопоставленные суперклассы". Пример из «Сопоставленных суперклассов» не добавляет $ mappedRelated1 в EntitySubClass. И пример из «Наследования таблиц классов» удаляет все остальные расширенные поля из класса Meal и добавляет некоторый столбец «dtype» в таблицу Meal.

/**
 * @ORM\Entity(repositoryClass="App\Repository\OrderItemRepository")
 */
class OrderItem extends Meal
{
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Order", inversedBy="orderItems")
     */
    private $order;

    /**
     * @ORM\Column(type="integer")
     * @Assert\NotBlank
     * @Assert\Type("string")
     */
    private $amount;
}


/**
 * @ORM\Entity(repositoryClass="App\Repository\MealRepository")
 */
class Meal
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\NotBlank
     * @Assert\Type("string")
     */
    protected $name;

    /**
     * @ORM\Column(type="float")
     * @Assert\NotBlank
     * @Assert\Type("float")
     */
    protected $price;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\Image(
     *     mimeTypes={"image/jpeg", "image/png"}
     * )
     */
    protected $image;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Menu", inversedBy="meals")
     */
    protected $menu;
}

Я ожидаю, что в таблице "order_item" будет столбец "menu_id", который будет иметь отношение к объекту Menu.

Я знаю, что могу скопировать все свойства из Meal в OrderItem, но это звучит неправильно.

EDIT:

И Meal, и OrderItem должны иметь свой экземпляр.

1 Ответ

0 голосов
/ 02 апреля 2019

столбец menu_id уже существует в еде

/**
     * @ORM\ManyToOne(targetEntity="App\Entity\Menu", inversedBy="meals")
     */
    protected $menu;

Класс OrderItem не должен иметь только потому, что он уже является подклассом еды. Также вам не нужно копировать все свойства из Meal в OrderItem. Вы можете проверить PHP расширяет здесь

...