2013-12-15 63 views
1

我在這裏遇到了PDO :: FETCH_CLASS有點麻煩。我需要它調用__construct(數組$ data)傳遞數組與數據庫返回的值。PDO FETCH_CLASS調用__construct傳遞數組

我的數據庫是這樣的:

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(數組$ data)方法會反過來說:

<?php 
$orderItem = new OrderItem(
    array(
     'id' => 1, 
     'order_id' => 10 
    ) 
); 

注入預期(同上):

$orderItem->id; 
$orderItem->order->id; 

所以反正是有使PDO調用__construct ()傳遞和關聯數組?

回答

0

獲取方法PDO::FETCH_CLASS返回所請求類的新實例,將列映射到類中的命名屬性。

假設你的類商店\型號\ OrderItem的

class Store\Model\OrderItem { 
    public $order; 
    public $order_id; 
    public $otherdata; // 

} 

要將值映射到你的類,你需要命名屬性JOIN 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

+0

其實我的OrderItem類有($ id,$ order)。 $ order類型是Order類。我需要的是FETCH_CLASS調用我的__construct()方法傳遞關聯數組,而不是設置知道數據的方法。 –

+0

爲什麼使用FETCH_CLASS? –

+0

我想你需要準確描述你想要什麼,因爲它不清楚 –