3

如何映射和实现 Setters/Getters 和一个实体的注释,该实体的信息在多个表中?

例如,我们有这些表:

  • 产品(id、名称、ctime)
  • 价格(id,价格)
  • 已售出(编号、金额)
  • 已购买(id,金额)
  • 收入(id,收入)
  • 市场份额(id,份额)
  • 库存(编号,数量)
  • 最后编辑(id,日期时间)

它们都通过 id 关联。产品实体是这样的:

class Product {
    private $id;
    private $name;
    private $price;
    private $sold;
    private $bought;
    private $revenue;
    private $share;
    private $stock;
    private $lastEdit;
}

谢谢

4

1 回答 1

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 不会改变您的架构。

希望有帮助

干杯

于 2013-06-27T17:04:55.850 回答