2013-12-15 8 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 (массив $ данных) метод, который превратит:

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

в ожидаемое (то же самое, что и выше):

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

Так есть в любом случае, чтобы сделать __construct PDO вызова() и ассоциативный массив?

ответ

0

Метод выборки 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

+0

На самом деле мой класс OrderItem имеет ($ id, $ order). Тип $ order - это класс Order. Мне нужно, чтобы FETCH_CLASS вызывал мой метод __construct(), передавая ассоциативный массив вместо установки данных, которые знают, как это сделать. –

+0

Зачем использовать FETCH_CLASS ?? –

+0

Я думаю, вам нужно будет точно описать, что вы хотите, поскольку неясно –

Смежные вопросы