假设我们有一个包含许多帖子的用户模型。
帖子模型有很多类别
帖子模型也有很多评论。
我们如何动态地找到用户模型的关系?
我的想法是创建一个管理后端到一个站点,在那里我可以拥有一个函数,在传递模型时,可以检索与该Object相关的所有数据,并根据找到的数据的关系显示它。
我猜我需要访问模型本身,而不是实例。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
我终于这样做了,所以这里是我用过的代码,如果有人想要的话。
我没有声称自己是一名优秀的程序员,我很新。
如果有人真的打算使用它,并且需要我的逻辑帮助,我会完全评论它,但我今晚空着...
public function get_child_objects($recursive = 0, $init = FALSE)
{
if ( ! $init )
{
Session::instance()->delete('model_register');
$init = TRUE;
$model_register = array();
}
else
{
$model_register = Session::instance()->get('model_register');
}
$return_array = array();
$parent_id = $this->id;
$parent_type = $this->_object_name;
// prevent unending loops of many to many relationships
if ( ! isset($model_register[$this->_object_name]) )
{
$model_register[$this->_object_name] = TRUE;
}
else
{
return;
}
Session::instance()->set('model_register', $model_register);
if ( ! count($this->_has_many))
{
return;
}
// foreach _has_many relationship get objects
foreach ($this->_has_many as $child_object_type => $child_object_data) {
$child_object_type_singular = Inflector::singular( (string) $child_object_type);
$child_object_type_plural = Inflector::plural( (string) $child_object_type);
$many_to_many = FALSE;
if (isset($child_object_data['through']))
{
$many_to_many = TRUE;
}
if (isset($child_object_data['model']))
{
$child_object_type = $child_object_data['model'];
}
if ( ! $many_to_many)
{
$child_objects = ORM::factory($child_object_type_singular)
->where($parent_type.'_id', '=', $parent_id)
->find_all();
if ( ! count($child_objects))
{
continue;
}
}
else
{
$child_object_type_plural = Inflector::plural( (string) $child_object_type);
$child_objects = $this->$child_object_type_plural->find_all();
if ( ! count($child_objects))
{
continue;
}
}
$obj_arr = array();
foreach ($child_objects as $child_object)
{
if ( (bool) $recursive)
{
$recursive = $recursive - 1;
$obj_arr[$child_object->id] = $child_object->get_child_objects($recursive, $init);
}
else
{
$obj_arr[$child_object->id] = NULL;
}
}
$return_array[$child_object_type_plural] = $obj_arr;
} // foreach
return $return_array;
} // get_child_objects