具有多个表的symfony2 / Doctrine实体

时间:2013-06-27 14:37:48

标签: php symfony doctrine-orm

如何映射和实现Setters / Getters以及一个实体的注释,其中包含多个表中的信息?

例如,我们有这些表格:

  • 产品(id,name,ctime)
  • 价格(身份证,价格)
  • 已售出(身份证,金额)
  • 买了(id,金额)
  • 收入(身份,收入)
  • MarketShare(id,share)
  • 股票(id,金额)
  • LastEdit(id,datetime)

它们都与id有关。 产品实体是这样的:

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

谢谢

1 个答案:

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

希望有所帮助

干杯