我在这里遇到PDO :: FETCH_CLASS的问题。我需要它调用__construct(array $ data)传递带有从数据库返回的值的数组。
我的数据库是这样的:
order -> id;
order_item -> id, order_id;
这就是我从数据库中检索的方式:
<?php
public function find($id) {
$stmt = $this->db->prepare("SELECT * FROM orderItem WHERE id = :id");
$stmt->setFetchMode(\PDO::FETCH_CLASS, 'Store\Model\OrderItem');
$stmt->execute(array('id' => $id));
return $stmt->fetch();
}
问题是PDO :: FETCH_CLASS正在创建:
$orderItem->id;
$orderItem->order_id;
而不是
$orderItem->id;
$orderItem->order->id;
我制作了一个__construct(array $ data)方法,该方法将转为:
<?php
$orderItem = new OrderItem(
array(
'id' => 1,
'order_id' => 10
)
);
进入预期(与上述相同):
$orderItem->id;
$orderItem->order->id;
那么无论如何要让PDO调用__construct()传递和关联数组?
答案 0 :(得分:0)
fetch方法PDO::FETCH_CLASS
返回所请求类的新实例,将列映射到类中的命名属性。
假设您的类Store \ Model \ OrderItem
class Store\Model\OrderItem {
public $order;
public $order_id;
public $otherdata; //
}
要将值映射到班级中的命名属性,您需要加入 2个表
SELECT orders.id,order_item.order_id
FROM orders, order_item
WHERE orders.id = order_item.id
AND order_id =:id
请参阅SQLFiddle
我将订单更改为订单,因为ORDER
是Reserved Word