PHP中带外键的ORM设计
我是PHP中OOP的新手,所以我有一个“基本”问题。 我有两个业务类,叫做“客户”和“订单”PHP中带外键的ORM设计,php,mysql,oop,Php,Mysql,Oop,我是PHP中OOP的新手,所以我有一个“基本”问题。 我有两个业务类,叫做“客户”和“订单” class Customer //corresponding to MySQL table 'customers' protected $customerNo; protected $customerName; //remaining customer details...... class Orders //corresponding to MYSQL table 'order
class Customer //corresponding to MySQL table 'customers'
protected $customerNo;
protected $customerName;
//remaining customer details......
class Orders //corresponding to MYSQL table 'orders'
protected $orderNo;
protected $customerNo; //foreign key from above class/table
//remaining order details.....
Orders类在实例化customer对象时是否应该加载该对象,以便执行以下操作
$objOrder = new Orders($orderNo);
$objOrder->objCustomer->someCustomerClassMethod();
基本上,如果一个表有一个或多个外键,这些外键基本上“指向”另一个业务类对象,那么这些(与外键相关的)对象是否应该与所讨论的对象一起实例化?我不会使用构造函数来实现这一点,因为它是错误的和不清楚的 businees类中的构造函数意味着创建新的业务对象。从技术上讲,您可以在这里创建一个PHP对象,但从逻辑上讲,您应该考虑业务级别。在业务级别上,您要执行的操作是一个简单的查询,目的是获取具有特定特征(在本例中,是具有指定ID)的业务对象 因此,不是: $objOrder=新订单($orderNo) 我只想: $objOrder=Orders::get($orderNo) get是Orders类中的一个静态方法,是一种服务,从逻辑上讲,它是满足您需求的清晰自然的解决方案。其定义如下:
class Orders {
public static function get(id) {
// use this id to retrieve the corresponding object - order
return order;
}
// other stuff here
}
仅当您确实想要创建新业务对象时才使用构造函数(例如,要连接到DB,请创建新实例)。没有好的做法是在订单中只包含客户id。只要反映现实就行了。我想说另一种方式更有意义,即客户有订单。订单没有客户。至于实例化另一个内部的对象,则有争议。你可能会发现这段关于依赖注入的视频是一块很好的手表,