Sorting 相关模型上的CakePHP分页排序()

Sorting 相关模型上的CakePHP分页排序(),sorting,cakephp,pagination,jquery-ui-sortable,paginator,Sorting,Cakephp,Pagination,Jquery Ui Sortable,Paginator,我有两个模型:计划和计划细节 关系是:计划详细信息有许多计划计划属于计划详情 在PlanDetailsview.ctp中,我正在拉入相关的计划 我正在尝试按任何字段对计划进行排序(我已经全部尝试过),但我无法使其正常工作。我想我忽略了一些非常简单的事情 以下是我的基本代码: PlanDetail>>view.ctp: ...foreach ($planDetail['Plan'] as $plan_edit) : $class = null; if ($i++ % 2 == 0) { $

我有两个模型:计划计划细节

关系是:计划详细信息有许多计划计划属于计划详情

PlanDetailsview.ctp中,我正在拉入相关的计划

我正在尝试按任何字段对计划进行排序(我已经全部尝试过),但我无法使其正常工作。我想我忽略了一些非常简单的事情

以下是我的基本代码:

PlanDetail>>view.ctp:

...foreach ($planDetail['Plan'] as $plan_edit) :
$class = null;
if ($i++ % 2 == 0) {
    $class = ' class="altrow"';
}...

<?php echo $this->Paginator->sort('Plan ID', 'Plan.id'); ?>...

...<?php echo $plan_edit['id']; ?>

我应该补充一点,没有抛出任何错误,ID字段上的sort()箭头按预期显示,但无论以哪种方式单击,排序顺序都不会改变。

对不起,我无法对问题本身进行评论,但我注意到,在您的操作中,您将
plandail
设置为您读取的plandail记录(将
recursive
设置为2),然后将
plan
设置为
paginate
调用的结果

然后,在视图模板中,迭代包含的
Plan
关联,如下所示:

foreach ($planDetail['Plan'] as $plan_edit):
但是,为了完成排序和分页,您需要显示
paginate
调用的结果,即迭代
$plan
中包含的记录

在视图模板中执行
debug($plan)
,查看得到的结果,并查看按不同字段排序时记录的顺序是否发生变化

另外,也许您正在使用我不知道的语法,但是如果您只是在控制器中调用
$this->paginate('Plan')
,我不知道您将只获得特定
PlanDetail
记录的相关
Plan
记录。(传递到
视图
操作的
$id
计划
记录之间没有任何关联。)您可能需要向
分页
调用添加一些条件,如下所示:

$this->paginate['Plan'] = array('conditions' => array('Plan.plan_detail_id' => $id));
$this->set('plans', $this->paginate('Plan'));

以下是我为解决这个问题所做的工作。基于johnp&tokes提供的一些有用的指导

平面图详情/view.ctp:

...foreach ($planDetail['Plan'] as $plan_edit) :
$class = null;
if ($i++ % 2 == 0) {
    $class = ' class="altrow"';
}...

<?php echo $this->Paginator->sort('Plan ID', 'Plan.id'); ?>...

...<?php echo $plan_edit['id']; ?>
...$i = 0;
foreach ($plan as $plan_edit) : // note $plan here.
}...
在“我的计划”\u details\u controller.php视图操作中:

$conditions = array("Plan.plan_detail_id" => "$id");
$this->set('plan', $this->paginate('Plan', $conditions)); // note "plan" in the first argument of set (this is required to pass the results back to the view). Also. The $condition is set to return ONLY plans that match the plan_detail_id of id (on the plan_details table).
在我看来,为了得到结果(因为我更改了数组名称),我必须更改获取值的方式:

$plan_edit['Plan']['modified'] // note I placed ['Plan'] in front of these calls as the array called for this to get the data...

好的,直到下一个问题!解决。

我认为所有这些都应该放在您的计划控制器中。因为您实际上正在对计划进行分页。这可能无法解决您的问题,但当您查看正在处理的数据时,这是有意义的pulling@JohnP-你可能是对的,但我正在查看平面图详细信息视图文件中的所有内容(使用plan_details controller的查看操作)。并在该文件中调用分页。请查看底部的SQL转储,查看SQL中是否进行了任何排序,以及它是否看起来很奇怪。它应该执行一个简单的SELECT*。这里的问题是,由于您使用的是PlanDetail控制器,它可能会混淆它应该是什么模型sorting@JohnP-事实上是这样按SQL“选择
Plan
id
…其中1=1按
Plan
id
asc排序”并更改为“.desc”如果我切换排序。似乎查询正在按预期进行,但它没有反映在视图表中。感谢您的评论。您给了我正确的方向。我将在下面发布我的最终解决方案,该解决方案似乎正在按预期工作。