手动数据库抽象模式,不使用ORM

时间:2015-09-22 19:58:57

标签: php mysql orm

我符合以下标准:我有两个来自ShippingGroup和Shipping类的模型对象,其中Shipping是ShippingGroup的子项。 ShippingGroup-> shippings像往常一样照顾孩子们。在mySql数据库中,我有以下实体:

Simple case

我现在处理这些情况很长一段时间,并且总是有这样的疑问,在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}");
                }

            }
        }


    }



}

0 个答案:

没有答案