gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:12:07 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com