【发布时间】:2013-01-31 17:33:32
【问题描述】:
我有这样的模型关系:
ProjecthasMany SubProjecthasMany Item
我想设置一个containable 数组,这样我就可以找到属于特定Project 的所有Items,并对结果进行分页。所以,在我的ItemsController 我有:
public $paginate = array(
'Item' => array(
'limit' => 10,
'order' => array('
'Item.create_time' => 'desc'
),
'contain' => array(
'SubProject' => array(
'Project'
)
)
)
);
显然,我需要在某处放置"SubProject.project_id = $pid" 之类的条件,但我尝试过的任何方法都不会产生正确的结果。我能做到的最好结果是如下所示:
Array
(
[0] => Array
(
[Item] => Array
(
[id] => 13
[file_name] => foo.tar.gz
.... other keys ...
[create_time] => 2013-01-23 14:59:49
[subProject_id] => 4
)
[SubProject] => Array
(
[id] => 4
[name] => foo
[project_id] => 2
..... other keys ....
[Project] => Array
(
)
)
)
[1] => Array
.....
编辑:省略不匹配的项目记录是完全正确的;我想跳过没有匹配项目记录的任何项目记录。
我想到了manually specify my joins,但我觉得没有必要。
这似乎应该是显而易见的,但是,解决方案让我无法理解。
【问题讨论】:
-
除了我在问题中提到的
hasMany关系(以及相关的belongsTo关系)之外,模型真的没有任何东西。 -
为什么不使用 $pid 查找子项目,然后提取 $subpids(可能使用 Set::extract),然后使用 $subpids 对项目进行分页?
-
我想这是可能的,但这不是 Containable 设计的那种搜索吗?
标签: cakephp