【发布时间】:2010-09-01 14:03:08
【问题描述】:
我需要一个关于如何操作嵌套模型的示例。
假设我们有一些订单管理应用程序和模型:Order、Position、Item。
订单可以包含职位,职位可以包含项目。
问题是:如何处理数据选择?
一些需要的用例:
- 获取带有仓位的订单列表和 项目(如我的示例代码)
- 仅获取订单列表(不含职位和项目)
- 获取一些统计信息,例如单个 Position 中所有 Item 的总数
我可以这样做:
class Order_Mapper
{
public function getOrders($criteria)
{
$orders = array(); // Get order list from DB
foreach($orders as $order)
{
$positions = Position_Mapper::getPositionsByOrderId($order->id);
foreach($positions as $position)
{
$order->addPosition($position);
}
}
return $orders;
}
}
class Position_Mapper
{
public function getPositionsByOrderId($order_id)
{
$positions = array(); // Get position list from DB
foreach($positions as $position)
{
$items = Item_Mapper::getItemsByPositionId($position->id);
foreach($items as $item)
{
$position->addItem($item);
}
}
return $positions;
}
}
...但这效率低下,因为需要许多 SQL 查询,一个用于订单选择,一个用于每个 Order 以获取 Positions,然后一个用于每个 Position 以获取 Items。
我在 MVC 方面非常缺乏经验,所以欢迎任何帮助!
关于 Doctrine - 我真的不想学习新的 ORM 套件,也不介意手动编写 SQL 查询。我只需要知道如何完成上述任务。
Here 是我第二次尝试在没有开销的情况下完成上述所有用例。请看一看,告诉我你的想法。代码很简单。
【问题讨论】:
标签: php model-view-controller model nested hierarchy