我符合以下标准:我有两个来自ShippingGroup和Shipping类的模型对象,其中Shipping是ShippingGroup的子项。 ShippingGroup-> shippings像往常一样照顾孩子们。在mySql数据库中,我有以下实体:
我现在处理这些情况很长一段时间,并且总是有这样的疑问,在CRUD方面没有做到这一点。创建,读取,删除当然很容易,但更新不是。在我看来。
我知道我可以使用 ORM 并且已经完成但是我对那里的解决方案(尝试过的学说和redbeans)并不满意,并且想要手动设置以影响设计和性能
请问一个人如此友善地发布一对多,多对一和多对多关系的例子吗?或者至少暗示我提供像博客文章这样的免费资源。
谢谢!
我通常的做法:
if (!is_object($shipping_group) ||
get_class($shipping_group) != "ShippingGroup" ||
$shipping_group->shipping_group_id === NULL) return;
global $db;
$sql = "UPDATE ShippingGroups SET label={$shipping_group->label} WHERE shipping_group_id={$shipping_group->shipping_group_id};";
if ($db->query($sql)) {
// shippings
$childs_old = array();
$childs_new = array();
foreach ($shipping_group->shippings as $shipping) {
if ($shipping->shipping_id === NULL) {
$childs_new[$shipping->shipping_id] = $shipping;
} else {
$childs_old[$shipping->shipping_id] = $shipping;
}
}
$sql = "SELECT shipping_id FROM Shippings WHERE shipping_group_id={$shipping_group->shipping_group_id};";
if ($db_shippings = $db->query($sql)) {
while ($row = $db_shippings->fetch_array(MYSQLI_ASSOC)) {
$shipping_id = $row['shipping_id'];
if (isset($childs_old[$shipping_id])) {
$this->update_shipping($childs_new[$shipping_id]);
} elseif (isset($childs_new[$shipping_id]) {
$this->create_shipping($childs_new[$shipping_id]);
} else {
$this->delete_shipping($childs_new[$shipping_id]);
// $db->query("DELETE FROM Shippings WHERE shipping_id={$shipping_id}");
}
}
}
}
}