我遇到一个问题,我无法在paginate中使用sortWhitelist来启用排序功能,以实现"第二级相关模型的列。 (它适用于第一级相关模型' s)。让我清楚地描述一下:
表背景:
Users
:id
,name
Tickets
:id
,code
,name
,price
TicketsDiscounts
:id
,ticket_code
,user_id
,price
门票中有一个默认价格,有时还有折扣门票,提供更便宜的价格。
希望这样做:
我正在制作Tickets
的观看页面,它不仅显示Ticket
本身的数据,也显示
TicketDiscounts
记录Tickets.ticket_code = Tickets.code
和Users
记录TicketDiscounts.user_id = Users.user_id
。问题:
它实际上工作正常,直到我想为表添加一些排序函数。
我知道有一个名为sortWhitelist
的配置密钥,但在这种情况下它只支持"链接" TicketsDiscounts
。
像:
门票----> TicketsDiscounts [确定]
门票----> TicketsDiscounts ---->用户[NOT OK]
在TicketsController.php
:
public function view($id = null) {
$ticket = $this->Ticket->get($id);
$setting = [
"sortWhitelist" => [
"Users.id", "Users.name", "TicketsDiscounts.price"
]
];
$paginate_discountsowners = $this->paginate(
$this->Tickets->TicketsDiscounts
->findByTicketsCode($ticket->code)
->contain("Users"), $setting
);
$this->set('paginate_discountsowners', $paginate_discountsowners);
$this->set('_serialize', ['paginate_discountsowners']);
}
在view.ctp
:
<td><?= $this->Paginator->sort("id", "User ID", ["model" => "Users"]) ?></td>
<td><?= $this->Paginator->sort("name", "User Name", ["model" => "Users"]) ?></td>
<td><?= $this->Paginator->sort("price", "Discount Price", ["model" => "TicketsDiscounts"]) ?></td>
研究之: CakePHP - paginate and sort 2nd level association&lt; - 这个非常接近,但它的CakePHP 2.x,我看了它,但很难发现这个帖子对我的情况有用。
Pagination Sort in Cakephp 3.x&lt; - 这是3.x,好吧,但它只是1级关联模型。
感谢您阅读我的帖子,欢迎任何想法。
答案 0 :(得分:1)
Teachers
- &gt; Users
- &gt; Persons
并希望按此人的姓名排序。
<强> TeachersController 强>:
public $paginate = ['sortWhitelist' => ['Persons.forename']];
查看强>:
<?= $this->Paginator->sort('Persons.forename') ?>
因此,简而言之,我认为您只需更改第一个和第二个排序链接即可引用字段Users.id
和Users.name
。