Symfony2多表连接问题

问题描述 投票:0回答:1

我是Symfony的初学者。

我有2个实体:股票和销售。两者都有相关的数据库表。

股票具有以下结构:

+-------------+--------------+------+-----+---------+----------------+
| 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数据库表中任何项目的实际购买记录。

它正在显示我的第一个销售项目,我遇到了一个重大问题。

为了显示销售,我的愿景是在两个表之间执行一条SQL语句,其中Sales:sid == Stock:id - 我遇到了新手问题,因为我找不到一种直接的方法来执行我执行的SQL执行习惯了。

我该如何开始呢?我想通过Stock表中的获取相关数据打印每个销售的详细信息。

mysql symfony doctrine
1个回答
1
投票

Doctrine为您处理这类事情。您可以像在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 Execution doctrine能够执行原始sql,但最好使用doctrine的dql和QueryBuilder。看看dqlQueryBuilder

© www.soinside.com 2019 - 2024. All rights reserved.