我正在学习OOPHP,我正在寻找一些“最佳实践”建议。
对于关系数据库,许多表中显然存在外键。当我为我的网站创建模型时,我试图确定在模型中进行JOIN查询是否更好,或者让一个模型调用另一个模型?
调用其他模型似乎可以使代码更加模块化。无论哪种方式似乎都创建依赖关系,无论是在另一个表还是另一个模型上。
如果我采用'调用其他模型'的方法,我似乎遇到了另一个问题:无限循环。这是我遇到的例子。我有2个表,person
和school
。每个person
都有一个最喜欢的学校,由schoolId
代表。每个school
都有principal
,即personId
。
行映射到的person
对象在其构造函数中接受school
对象,但学校行映射到的school
对象接受person
个对象它的构造函数。
从我发现的,关于延迟加载的东西,似乎是解决方案,但(我可能是错的)似乎我这样做我不能使用PHP的类型提示。
(我猜很多人会向我推荐一个像Doctrine这样的ORM工具,这是我将来肯定要研究的东西。我现在正在避免它,因为它假定的学习曲线陡峭,因为我觉得我理解如果我自己尝试一次,这些工具以后会更好)
答案 0 :(得分:0)
好问题!我有同样的想法。我认为在查看框架之前启动代码是一个非常好的主意:)
当我编写模型生成器时,我决定不使用JOINS并使用'延迟加载'。意思是我有这样的类(只是伪代码):
class Person extends Model_Resource {
/**
*
*/
protected $name;
/**
* @var Address <-- external reference
*/
protected $address;
/**
* @return Person
*/
public static function select($filter) {
return DB::instance(filter_query('SELECT * FROM `person`', $filter));
}
/**
* @return Address
*/
public function getAddress() {
// lazy loading :
if(is_null($this->address)) {
$this->address = Address::select(new Filter('p_id', $this->id));
}
return $this->address;
}
}
多年来,这在中型应用程序中对我有用。当我真的需要加速事情或使用有点不规则的查询时,我可以自由覆盖自动生成的方法并使用JOINS,UNION等......
我很好奇其他人会说些什么。