首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony4扩展实体不会将实体列添加到数据库架构

Symfony4扩展实体不会将实体列添加到数据库架构
EN

Stack Overflow用户
提问于 2019-04-02 17:01:54
回答 2查看 995关注 0票数 0

我正在开发symfony 4.2应用程序。我有实体餐和OrderItem。OrderItem应该拥有所有的Meal实体属性+少量自己的属性。问题出在ManyToOne关系列。它不会添加到order_item表中。

https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/inheritance-mapping.html我尝试了“类表继承”和“映射超类”。“映射超类”中的示例不会将$mappedRelated1添加到EntitySubClass。“类表继承”中的示例从Meal类中删除了所有其他扩展字段,并在Meal表中添加了某种"dtype“列。

代码语言:javascript
复制
/**
 * @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”列,这将与菜单实体有关。

我知道我可以将所有属性从Meal复制到OrderItem,但这听起来并不正确。

编辑:

Meal和OrderItem都应该能够拥有它的实例。

EN

回答 2

Stack Overflow用户

发布于 2019-04-02 22:36:30

meal中已存在menu_id列

代码语言:javascript
复制
/**
     * @ORM\ManyToOne(targetEntity="App\Entity\Menu", inversedBy="meals")
     */
    protected $menu;

OrderItem类并不仅仅因为它已经是meal的子类而需要拥有。此外,您也不需要将所有属性从Meal复制到OrderItem。你可以在这里查看php extends

票数 0
EN

Stack Overflow用户

发布于 2020-04-02 00:14:32

我也有同样的问题。我使用了特征而不是继承,问题就解决了。

您的类将是这样的

代码语言:javascript
复制
trait MealInfoTrait
{   
    /**
     * @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;
}

然后,改变你的用餐课程

代码语言:javascript
复制
/**
 * @ORM\Entity(repositoryClass="App\Repository\MealRepository")
 */
class Meal
{
    use MealInfoTrait;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    protected $id;
}

对您的OrderItem类执行相同的操作。不要忘记添加数据库的id。

代码语言:javascript
复制
/**
 * @ORM\Entity(repositoryClass="App\Repository\OrderItemRepository")
 */
class OrderItem
{
    use MealInfoTrait;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Order", inversedBy="orderItems")
     */
    private $order;

    /**
     * @ORM\Column(type="integer")
     * @Assert\NotBlank
     * @Assert\Type("string")
     */
    private $amount;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55470785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档