php - 具有多个表的 symfony2/Doctrine 实体

标签 php symfony doctrine-orm

如何为一个在多个表中包含信息的实体映射和实现 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;
}

谢谢

最佳答案

对于所有只有一个值的属性,您不必为此使用单独的表(实体),使用简单的属性(变量),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 不会改变您的架构。

希望对你有帮助

干杯

关于php - 具有多个表的 symfony2/Doctrine 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17346117/

相关文章:

php - 当通过 cli 命令抛出异常时,Symfony 3.3 获取堆栈跟踪(例如服务器 :start)

php - Doctrine 冲洗单个实体

javascript - 选择一个选项时不发送文本框值

javascript - ajax响应数据未定义

scope - PHP:无法从包含的文件访问对象

php - 文件类型为 create 的 symfony 4 表单集合实体

symfony - 查找/自定义 Symfony Forms Twig block 名称

php - 学说2,十进制只能包含14位数字

php - 通过 Doctrine Symfony 框架在现有数据库中添加列

php - Android使用JSON插入mysql