如何映射和实现Setters / Getters以及一个实体的注释,其中包含多个表中的信息?
例如,我们有这些表格:
它们都与id有关。 产品实体是这样的:
class Product {
private $id;
private $name;
private $price;
private $sold;
private $bought;
private $revenue;
private $share;
private $stock;
private $lastEdit;
}
谢谢
答案 0 :(得分:2)
对于只有一个值的所有属性,您不必为此使用单独的表(实体),使用简单属性(变量),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不会改变您的架构。
希望有所帮助
干杯