PHP:将查询行提取到多个对象中

时间:2016-02-19 21:12:26

标签: php mysql performance

我想将查询中的对象列表返回给数据库,我的问题是实现此过程的最有效方法是什么 因为我的目的是概括方法并在我的项目中扩展它。 希望该过程不会过多地耦合到连接驱动程序等。

我使用PHP 5.4,MySQL 5.0和PDO作为连接驱动程序。

我将其描述为一个简单的Master-Detail示例,但它可以用于任何多个关系表。所以这些是对象的类,以及等效的数据库表。

class Category
{
    private $id;
    private $name;

    public function __construct($pID, $pName)
    {
        $this->id = $pID;
        $this->name = $pName;
    }
}

class Item
{
    private $id;
    private $name;
    private $description;
    private $category;

    public function __construct($pID, $pName, $objCategory, $pDescripton="")
    {
        $this->id = $pID;
        $this->name = $pName;
        $this->category = $objCategory;
        $this->description = $pDescripton;
    }
}

首先构建查询(在另一个过程中),尝试尽可能通用:

$sql = "SELECT 
    e1.id as t1_c1, e1.name as t1_c2,
    e2.id as t2_c1, e2.name as t2_c2, e2.description as t2_c3
FROM category e1, item e2 
WHERE 
    e2.categoryId = e1.id";

我想将结果作为对象列表。因为最后,每个项目都将由对象表示的实体组成。

作为我的第一个提议,为实现这一点,它迭代作为关联数组获得的所有结果记录,在每次迭代中创建其对象:

// From here, I wonder what is better or more efficient to implement
$result = array();
try {
    $query = $linkDB->query($sql);
    //It is by using the 'fetch' method, but is possible to use fetchAll? or another more efficient way?
    while ( $row = $query->fetch(PDO::FETCH_ASSOC) ) {
        // Object no.2
        $objCategory = new Category($row["t1_c1"], $row["t1_c2"]);
        // Object no.1, and finally which is added to the list.
        $objItem = new Item($row["t2_c1"], $row["t2_c2"], $objCategory, $row["t2_c3"]);
        $result[] = $objItem;
    } 
} catch (PDOException $e) {
    print $e->getMessage();
}
return result;
// ...

非常感谢提前。

0 个答案:

没有答案