【发布时间】:2017-09-19 19:54:17
【问题描述】:
我有课:
class Order {
private $order_id;
private $product;
private $quantity;
}
class Product {
private $product_id;
private $name;
private $price;
}
我也有那些 MySql 表:
orders:
+----------+------------------+----------+
| order_id | product | quantity |
+----------+------------------+----------+
| INTEGER | INT(FOREIGN KEY) | INTEGER |
+----------+------------------+----------+
products:
+------------+---------+---------+
| product_id | name | price |
+------------+---------+---------+
| INTEGER | VARCHAR | INTEGER |
+------------+---------+---------+
orders.product 是与product.product_id 关联的外键。
我想使用 PDO 从订单表中获取 id 为 123 的订单,并自动将结果存储在 Order 类中。我知道有PDO::fetchObject 和PDO::FETCH_CLASS,问题是它们不能递归工作。
我知道我有一个简单的解决方案,即在一个查询中获取 order_id 和 quantity 列,然后在第二个查询中获取产品字段。
有没有办法在一个查询中实现这一点(使用 JOIN)?
【问题讨论】:
-
问题是它们不能递归工作是什么意思?
-
@Mikey 我想要的结果是一个 Order 对象,其中 product 字段指向一个 Procut 对象,两个对象的字段都具有获取的值。
-
我很确定没有“简单”的方法可以做到这一点。您必须自己编写该逻辑。解决方案 1 似乎是 IMO 的最佳选择,使用 2
fetchObject()然后设置订单的产品。解决方案 2 可能适用于fetchObject(),但您可能会在某处有一些丑陋的逻辑来重建订单的产品。