我正在开发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“列。
/**
* @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都应该能够拥有它的实例。
发布于 2019-04-02 22:36:30
meal中已存在menu_id列
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Menu", inversedBy="meals")
*/
protected $menu;OrderItem类并不仅仅因为它已经是meal的子类而需要拥有。此外,您也不需要将所有属性从Meal复制到OrderItem。你可以在这里查看php extends
发布于 2020-04-02 00:14:32
我也有同样的问题。我使用了特征而不是继承,问题就解决了。
您的类将是这样的
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;
}然后,改变你的用餐课程
/**
* @ORM\Entity(repositoryClass="App\Repository\MealRepository")
*/
class Meal
{
use MealInfoTrait;
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
protected $id;
}对您的OrderItem类执行相同的操作。不要忘记添加数据库的id。
/**
* @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;
}https://stackoverflow.com/questions/55470785
复制相似问题