Symfony2 multi-table 连接问题
Symfony2 multi-table join issues
我是 Symfony 的初学者。
我有 2 个实体:库存和销售。两者都有其关联的数据库 tables.
股票结构如下:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| description | varchar(255) | NO | | NULL | |
| input | int(11) | NO | | NULL | |
| output | int(11) | NO | | NULL | |
| balance | int(11) | NO | | NULL | |
| created | datetime | NO | | NULL | |
| updated | datetime | NO | | NULL | |
| unitcost | double | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
销售额具有以下结构:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| cost | double | NO | | NULL | |
| date | datetime | NO | | NULL | |
| profitloss | double | NO | | NULL | |
| sid | int(11) | YES | MUL | NULL | |
+------------+----------+------+-----+---------+----------------+
我正在尝试在 Stock 和 Sales 之间创建一对多关系。
库存是商店中所有待售商品的列表。 Sales 是 Stock 数据库中任意物品实际购买的记录 table.
在展示我的第一个销售商品的过程中,我遇到了一个重大问题。
为了显示促销,我的设想是在 table 之间执行 SQL 语句,其中 Sales:sid == Stock:id - 我 运行 进入新手问题,因为我找不到一种直接的方法来执行我已经习惯的那种 SQL 执行。
我该如何开始呢?我想通过从 Stock table.
中获取相关数据来打印每笔销售的详细信息
Doctrine 处理这类事情 you.You 可以创建双向一对多关联,如 One-to-Many Association。
所以你的股票实体会像
class Stock{
...
/**
*@OneToMany(targetEntity="YourBundleNamespace\Entity\Sale", mappedBy="stock")
*
*/
protected $sales;
}
class Sale{
protected $id;
....
/**
*@ManyToOne(targetEntity="YourBundleNameSpace\Entity\Stock", inversedBy="sales")
*@JoinColumn(name="sid", referencedColumnName="id")
*/
protected $stock;
}
然后只需找到您想要的销售实体控制器并调用 $sale->getStock()
,您将获得与该销售关联的 Stock
实体。
对于sql执行学说有能力执行raw sql但是你最好使用学说的dql和QueryBuilder
。见 dql and QueryBuilder
我是 Symfony 的初学者。
我有 2 个实体:库存和销售。两者都有其关联的数据库 tables.
股票结构如下:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| description | varchar(255) | NO | | NULL | |
| input | int(11) | NO | | NULL | |
| output | int(11) | NO | | NULL | |
| balance | int(11) | NO | | NULL | |
| created | datetime | NO | | NULL | |
| updated | datetime | NO | | NULL | |
| unitcost | double | NO | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
销售额具有以下结构:
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| cost | double | NO | | NULL | |
| date | datetime | NO | | NULL | |
| profitloss | double | NO | | NULL | |
| sid | int(11) | YES | MUL | NULL | |
+------------+----------+------+-----+---------+----------------+
我正在尝试在 Stock 和 Sales 之间创建一对多关系。
库存是商店中所有待售商品的列表。 Sales 是 Stock 数据库中任意物品实际购买的记录 table.
在展示我的第一个销售商品的过程中,我遇到了一个重大问题。
为了显示促销,我的设想是在 table 之间执行 SQL 语句,其中 Sales:sid == Stock:id - 我 运行 进入新手问题,因为我找不到一种直接的方法来执行我已经习惯的那种 SQL 执行。
我该如何开始呢?我想通过从 Stock table.
中获取相关数据来打印每笔销售的详细信息Doctrine 处理这类事情 you.You 可以创建双向一对多关联,如 One-to-Many Association。 所以你的股票实体会像
class Stock{
...
/**
*@OneToMany(targetEntity="YourBundleNamespace\Entity\Sale", mappedBy="stock")
*
*/
protected $sales;
}
class Sale{
protected $id;
....
/**
*@ManyToOne(targetEntity="YourBundleNameSpace\Entity\Stock", inversedBy="sales")
*@JoinColumn(name="sid", referencedColumnName="id")
*/
protected $stock;
}
然后只需找到您想要的销售实体控制器并调用 $sale->getStock()
,您将获得与该销售关联的 Stock
实体。
对于sql执行学说有能力执行raw sql但是你最好使用学说的dql和QueryBuilder
。见 dql and QueryBuilder