Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在db中执行oo的常见做法是什么?_Php_Database_Oop_Object Oriented Analysis - Fatal编程技术网

Php 在db中执行oo的常见做法是什么?

Php 在db中执行oo的常见做法是什么?,php,database,oop,object-oriented-analysis,Php,Database,Oop,Object Oriented Analysis,这是情况。。。 我有一个DBManager,它实现了一个DBInterface,在DBInterface中,我得到了4种方法: -create(DBCmd); -read(DBCmd); -update(DBCmd); -delete(DBCmd); DBCmd对象负责生成SQL语句,DBCmd在SQL语句中需要一个对象: class DBCmd{ public _constructor($aObj){ } public executeCreate(){ }

这是情况。。。 我有一个DBManager,它实现了一个DBInterface,在DBInterface中,我得到了4种方法:

-create(DBCmd);
-read(DBCmd);
-update(DBCmd);
-delete(DBCmd);
DBCmd对象负责生成SQL语句,DBCmd在SQL语句中需要一个对象:

class DBCmd{
    public _constructor($aObj){
    }
    public executeCreate(){
    }
    public executeRead(){
    }
    public executeUpdate(){
    }
    public executeDelete(){
    }

}
流程如下所示:

aObject ---> put it into DBCmd ----> put the DBCmd in DBManager ---> execute 
class customer{
    //skip other methods...

    public getPurchaseRecords(){
       //query the db
    }

}
但是,当我获取一些与其他表相关的对象时,就会出现问题,例如……一个客户有一个购买记录,而哪个购买记录有许多项目

那么,我的阅读方法是什么呢?我应该阅读所有与客户相关的记录吗??我是否也需要循环采购记录中的所有项目? 如果是,当我阅读customer时,我需要查询3个表,但有些表可能不需要查看…这会浪费资源

我提出了另一个解决方案,我创建了一组新的DBCmd,它允许我获取相关的DB项,例如:

class getReleatedPurchaseRecordDBCmd{
    public _constructor($aCustomerObject){
    }
    //.... ....
}
$datamodel->getCustomer($id);//or some such method
但在这个“解决方案”中,我遇到了一些问题,就是我失去了对象客户中的关系…是的,我可以读回所有记录,得到客户对象基本上不知道关于购买记录的任何事情

有些人可能会要求我这样做:

aObject ---> put it into DBCmd ----> put the DBCmd in DBManager ---> execute 
class customer{
    //skip other methods...

    public getPurchaseRecords(){
       //query the db
    }

}
这是可行的,但我不希望对象结构在db之间有很强的关系…这就是我提出DBCmd的原因


所以,一切似乎都很耦合,怎么能解决呢?多谢各位

对于类似的内容,我倾向于在初始查询中获取子对象的计数,通常涉及sql计数和联接,然后使用单独的getSubObjects命令,如果以后需要,可以调用该命令。例如:

class getReleatedPurchaseRecordDBCmd{
    public _constructor($aCustomerObject){
    }
    //.... ....
}
$datamodel->getCustomer($id);//or some such method
返回

class Customer{
   $id = 4;
   $recordCount = 5;
   $records = null;
}
然后,我可以根据需要将计数用于任何显示内容,如果需要填充记录,请调用:

$customer->records = $datamodel->getCustomerRecords($customer->id);