我有两种模式:计划和计划详情。
关系是: PlanDetails hasMany 计划。 计划属于 PlanDetails 。
在 PlanDetails view.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']; ?>
plan_details_controller.php:
...function view($id = null) {
if (!$id) {
$this->Session->setFlash(__('Invalid plan detail', true));
$this->redirect(array('action' => 'index'));
}
$this->PlanDetail->recursive = 2; // To run the editable form deeper.
$this->set('planDetail', $this->PlanDetail->read(null, $id));
$this->set('plan', $this->paginate('Plan'));
}...
我应该补充一点,没有错误被抛出,ID字段上的sort()箭头按预期显示,但排序顺序在单击时都不会改变。
答案 0 :(得分:1)
抱歉,我无法对此问题发表评论,但我注意到,在您的操作中,您将planDetail
设置为您阅读的PlanDetail记录(recursive
设为2),然后将plan
设置为paginate
调用的结果。
然后,在您的视图模板中,您将对包含$planDetail
关联的Plan
进行迭代,如下所示:
foreach ($planDetail['Plan'] as $plan_edit):
但是为了完成排序和分页,您需要显示paginate
调用的结果,即迭代$plan
中包含的记录。
在视图模板中执行debug($plan)
,看看您到达那里的结果,并查看按不同字段排序时记录的顺序是否发生变化。
另外,也许你正在使用我不知道的语法,但如果你只是在你的控制器中调用$this->paginate('Plan')
,我不知道你只会得到相关的{{1您的特定Plan
记录的记录。 (PlanDetail
操作中$id
与view
条记录相关联没有任何结果。)您可能需要在Plan
调用中添加一些条件,如下所示:
paginate
答案 1 :(得分:0)
以下是我为解决这个问题所做的工作。基于johnp&amp; amp; amp; amp; amp; amp;托克斯(Tokes)。
PLAN_DETAILS / view.ctp:
...$i = 0;
foreach ($plan as $plan_edit) : // note $plan here.
}...
在我的plan_details_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...
直到下一个问题!解决。