只是想知道是否有一种简单的方法可以在逐个实例的基础上自动填充对象的相关字段,而不是在配置文件中全局,或者为整个类。
我想包含单个实例的所有相关模型,而不需要链接大量include_related()
函数。像这样的东西会很好:
$x = new Model();
$x->include_all_related();
只是想知道是否有一种简单的方法可以在逐个实例的基础上自动填充对象的相关字段,而不是在配置文件中全局,或者为整个类。
我想包含单个实例的所有相关模型,而不需要链接大量include_related()
函数。像这样的东西会很好:
$x = new Model();
$x->include_all_related();
以为我必须把手弄脏核心。无论出于何种原因,我都没有想到我可以访问$has_many
and$has_one
数组。
解决方案很简单:
class Model extends Datamapper{
var $has_one = array('foo', 'bar', 'baz');
var $table = 'models';
function __construct($id = NULL){
parent::__construct($id);
}
function include_all_related(){
foreach($this->has_one as $h){
$this->include_related($h['class']);
}
return $this;
}
}
您可能想知道为什么我在变量中使用class
键。$h
在底层,Datamapper ORM 也会跟踪一些其他键,作为更大数组的一部分。如果你打电话print_r($h)
,你可以看到他们。密钥class
跟踪foo
和。_bar
baz
您可以在关系定义上启用它,如果您想要在特定实例上启用它,则需要在运行时更改该实例的关系配置。