我想将查询中的对象列表返回给数据库,我的问题是实现此过程的最有效方法是什么 因为我的目的是概括方法并在我的项目中扩展它。 希望该过程不会过多地耦合到连接驱动程序等。
我使用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;
// ...
非常感谢提前。