Sorting 相关模型上的CakePHP分页排序()
我有两个模型:计划和计划细节 关系是:计划详细信息有许多计划计划属于计划详情 在PlanDetailsview.ctp中,我正在拉入相关的计划 我正在尝试按任何字段对计划进行排序(我已经全部尝试过),但我无法使其正常工作。我想我忽略了一些非常简单的事情 以下是我的基本代码: PlanDetail>>view.ctp: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) { $
...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”如果我切换排序。似乎查询正在按预期进行,但它没有反映在视图表中。感谢您的评论。您给了我正确的方向。我将在下面发布我的最终解决方案,该解决方案似乎正在按预期工作。