最近我一直在使用PDO
我希望得到一张包含hasmany相关表格的表格。
我可以得到一张包含这样的表的表
array (
0 =>
stdClass::__set_state(array(
'order_id' => '170',
'purchase_id' => '222',
'product_option_id' => '014',
)),
1 =>
stdClass::__set_state(array(
'order_id' => '170',
'purchase_id' => '600',
'product_option_id' => '015',
)),
)
使用像这样的SQL查询
SELECT ord.order_id,puc.purchase_id,puc.product_option_id
FROM order ord
JOIN purchase puc
ON ord.order_id = puc.order_id
WHERE ord.order_id = '170'
但是我想得到这样的数据
array (
0 =>
array(
'order_id' => '170',
'purchase_id' => '222',
'purchase' => array(
0 =>
array(
'purchase_id' => '222',
'product_option_id' => '014',
),
1 =>
array(
'purchase_id' => '600',
'product_option_id' => '015',
),
)
)
)
如何使用PDO获取此类数据?
谢谢
答案 0 :(得分:3)
幸运的是,you CAN have it with PDO。
除了命令的id之外你还需要什么,任务是不可能的。
但只要你只需要订单中的唯一价值,你就可以得到这样的东西
array (
170 =>
array(
0 =>
array(
'purchase_id' => '222',
'product_option_id' => '014',
),
1 =>
array(
'purchase_id' => '600',
'product_option_id' => '015',
),
)
)
)
使用与
一样简单的代码$sql = "your sql";
$pdo->query($sql)->fetchAll(PDO::FETCH_GROUP);
但是,我发现获取用于过滤数据的相同订单ID的意义不大。可能应该是一些更接近您真实需求的其他查询?就像拿出几个订单的人一样?
答案 1 :(得分:1)
您无法通过PDO获得此功能,但您可以重新排列结果。可能的方法是使用array_reduce函数。
$orders = array_reduce($results, function ($carry, $item) {
if (!isset($carry[$item->order_id])) {
$carry[$item->order_id] = array(
'order_id' => $item->order_id,
'purchase' => array(array(
'purchase_id' => $item->purchase_id,
'product_option_id' => $item->product_option_id,
));
);
} else {
$carry[$item->order_id]['purchase'][] = array(
'purchase_id' => $item->purchase_id,
'product_option_id' => $item->product_option_id,
);
}
return $carry;
}, array());