对于只有一个值的所有属性,您不必为此使用单独的表(实体),使用简单的属性(变量)app/console doctrine:generate:entities
并将创建所有必需的 getter 和 setter。
如果您仍然需要(出于某种原因)将所有信息放在单独的表中,那么在这种情况下为所有属性(价格、已售出、收入等)创建实体并配置 OneToOne 或 OneToMany(取决于您是否希望拥有单一值或该属性的多个值)产品和相关实体之间的链接。
例如:
class Product {
...
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\OneToMany(targetEntity="Price", mappedBy="product")
*/
protected $prices;
/**
* @var Stock
* @ORM\OneToOne(targetEntity="Stock", mappedBy="product")
*/
protected $stock;
...
}
现在,具有 OneToOne 关系的 Stock 实体:
class Stock {
...
/**
* @var integer
* @ORM\Column(name="amount", type="integer")
*/
protected $amount;
/**
* @var Product
* @ORM\OneToOne(targetEntity="Product", inversedBy="stock")
*/
protected $product;
...
}
和具有 ManyToOne 关系的 Price 实体:
class Price {
...
/**
* @var float
* @ORM\Column(name="price", type="float")
*/
protected $price;
/**
* @var Product
* @ORM\ManyToOne(targetEntity="Product", inversedBy="prices")
*/
protected $product;
...
}
正如我之前提到的,app/console doctrine:generate:entities
将根据配置创建所有必需的 getter 和 setter。
注意:请记住,使用此配置,具有 OneToOne 关系的子实体将使用附加字段进行更新 - product_id。OneToMany 不会改变您的架构。
希望有帮助
干杯