【问题标题】:PDO FETCH_CLASS call __construct passing arrayPDO FETCH_CLASS 调用 __construct 传递数组
【发布时间】:2013-12-15 03:29:03
【问题描述】:

我在使用 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() 传递和关联数组?

【问题讨论】:

    标签: php pdo constructor


    【解决方案1】:

    fetch 方法PDO::FETCH_CLASS 返回所请求类的新实例,将列映射到类中的命名属性。

    假设你的类 Store\Model\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

    【讨论】:

    • 其实我的 OrderItem 类有 ($id, $order)。 $order 类型是 Order 类。我需要的是 FETCH_CLASS 调用我的 __construct() 方法传递一个关联数组,而不是设置知道如何的数据。
    • 为什么要使用 FETCH_CLASS ??
    • 我认为你需要准确地描述你想要什么,因为它不清楚
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 2012-02-26
    • 2020-01-28
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2011-12-24
    • 2015-04-29
    相关资源
    最近更新 更多