Php symfony2/具有多个表的条令实体
如何映射和实现一个实体的setter/getter和注释,该实体在多个表中包含它的信息 例如,我们有以下表格:Php symfony2/具有多个表的条令实体,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,如何映射和实现一个实体的setter/getter和注释,该实体在多个表中包含它的信息 例如,我们有以下表格: 产品(id、名称、ctime) 价格(id、价格) 已售出(id、金额) 购买(身份证、金额) 收入(id,收入) 市场份额(id,份额) 库存(id、金额) LastEdit(id,日期时间) 它们都是通过id联系起来的。 产品实体是这样的: class Product { private $id; private $name; private $pric
- 产品(id、名称、ctime)
- 价格(id、价格)
- 已售出(id、金额)
- 购买(身份证、金额)
- 收入(id,收入)
- 市场份额(id,份额)
- 库存(id、金额)
- LastEdit(id,日期时间)
class Product {
private $id;
private $name;
private $price;
private $sold;
private $bought;
private $revenue;
private $share;
private $stock;
private $lastEdit;
}
感谢您对于只有一个值的所有属性,您不必使用单独的表(实体)。为此,请使用简单属性(变量)和
app/console原则: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关系的股票实体:
class Stock {
...
/**
* @var integer
* @ORM\Column(name="amount", type="integer")
*/
protected $amount;
/**
* @var Product
* @ORM\OneToOne(targetEntity="Product", inversedBy="stock")
*/
protected $product;
...
}
class Price {
...
/**
* @var float
* @ORM\Column(name="price", type="float")
*/
protected $price;
/**
* @var Product
* @ORM\ManyToOne(targetEntity="Product", inversedBy="prices")
*/
protected $product;
...
}
和具有多个关系的价格实体:
class Stock {
...
/**
* @var integer
* @ORM\Column(name="amount", type="integer")
*/
protected $amount;
/**
* @var Product
* @ORM\OneToOne(targetEntity="Product", inversedBy="stock")
*/
protected $product;
...
}
class Price {
...
/**
* @var float
* @ORM\Column(name="price", type="float")
*/
protected $price;
/**
* @var Product
* @ORM\ManyToOne(targetEntity="Product", inversedBy="prices")
*/
protected $product;
...
}
正如我前面提到的app/console原则:generate:entities
将根据配置创建所有必需的getter和setter
注意:请记住,使用此配置,具有OneTONE关系的子实体将使用附加字段-product_id进行更新。OneToMany不会改变您的模式
希望有帮助
干杯非常感谢,这确实很有帮助。在这种方法中,条令是否会对获取信息进行过多的查询?第二个问题:如果我持久化一个没有价格的对象,它会在价格表中创建一个空行吗?因为产品中的prices属性是OneToMany关系,当您使用空的
prices
list保存产品时,数据库中不会创建任何内容。另一方面,如果选择为其他实体(属性)创建OneTONE关系,则必须在构造函数中手动或使用级联创建它们。如果您不这样做,那么访问这些属性将引发异常。稍后将通过对数据库的附加查询来访问它们。如果您不希望这样,那么按照我前面的建议使用常规属性(列)。