cakephp - 按分页中的二级关联排序
我正在玩一个与我跑的滑雪旅行有关的报价数据库。我试图列出引号,但按说出引用的人排序,我正在努力让分页助手让我这样做。
我有四个相关的表格。
报价,旅行,人和出席。出勤本质上是人和旅行的连接表。
关系如下;
出勤属于人有很多出席
出勤属于旅行有很多出席
出勤有很多报价属于出席
在QuotesController中,我使用containsable从Quote中检索字段,以及相关的Attendance,以及与该出席相关联的Trip和Person中的字段。
function index() {
$this->Quote->recursive = 0;
$this->paginate['Quote'] = array(
'contain' => array('Attendance.Person', 'Attendance.Trip'));
$this->set('quotes', $this->paginate());
}
这似乎工作正常,在视图中,我可以回应
foreach ($quotes as $quote) {
echo $quote['Attendance']['Person']['first_name'];
}
没有任何问题。
我无法工作的是访问/使用与paginate中的排序字段相同的变量
echo $this->Paginator->sort('Name', 'Attendance.Person.first_name');
要么
echo $this->Paginator->sort('Location', 'Attendance.Trip.location');
不行。它似乎是按某种东西排序,但我不确定是什么。
我传递的$ quotes数组看起来像这样;
Array
(
[0] => Array
(
[Quote] => Array
(
[id] => 1
[attendance_id] => 15
[quote_text] => Hello
)
[Attendance] => Array
(
[id] => 15
[person_id] => 2
[trip_id] => 7
[Person] => Array
(
[id] => 2
[first_name] => John
[last_name] => Smith
)
[Trip] => Array
(
[id] => 7
[location] => La Plagne
[year] => 2000
[modified] =>
)
)
)
如果有人能够建议我如何通过与Quote相关联的Person的first_name进行排序,我将非常感激。我怀疑我的语法错了,但我找不到答案。是不是可以通过这种方式按二级关联进行排序?
我和cakephp非常相似,所以请保持温柔。
首先十分感谢。
没有找到相关结果
已邀请:
3 个回复
济畦刨
改成:
希望这可以帮助
弓萍功
在调试$ this-> Paginator-> params-> paging->在视图中剪切后,您可以看到排序在两个单独的位置描述,“默认值”和“选项”。排序信息需要同时存在才能在视图中工作。 这是在控制器中设置顺序之后:
这是在使用$ this-> Paginator-> sort(“Publication”,“Publication.name”);之后。 注意options数组是空的。
是否真的需要修改paginator类才能使其工作? 更新: 我发现了问题: 在核心蛋糕控制器paginator中合并默认值和选项以创建查找查询。 但是当使用linkable进行排序时,options数组为空。因为选项在默认情况下列出,它会覆盖默认值,空数组会替换默认的选项数组。 解决方法是扩展app_controller.php中的paginate函数,如果为空,则取消设置options数组顺序值: (cake / libs / controller / controller.php中的第1172行)
然后这些选项不会被空白数组覆盖。 当然这不应该在controller.php中更改,而是将其放在app_controller.php中并将其移动到您的app文件夹中。
傻零凰死授
参数到
来解决此问题。
然后在你看来:
这在文档中注明: 如果要对任何关联数据或可能属于分页查询的计算字段进行排序,则需要此选项: 然而,疲惫的眼睛很容易错过,所以希望这有助于那里的人!