PDO FETCH_CLASS调用__construct传递数组

时间:2013-12-15 03:29:04

标签: php pdo constructor

我在这里遇到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()传递和关联数组?

1 个答案:

答案 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

我将订单更改为订单,因为ORDERReserved Word