CakePHP 3 - Paginate sortWhitelist不支持二级关联模型

时间:2015-12-11 03:49:44

标签: sorting cakephp pagination cakephp-3.0

我遇到一个问题,我无法在paginate中使用sortWhitelist来启用排序功能,以实现"第二级相关模型的列。 (它适用于第一级相关模型' s)。让我清楚地描述一下:

表背景:

  • Usersidname
  • Ticketsidcodenameprice
  • TicketsDiscountsidticket_codeuser_idprice

门票中有一个默认价格,有时还有折扣门票,提供更便宜的价格。

希望这样做:

我正在制作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级关联模型。

感谢您阅读我的帖子,欢迎任何想法

1 个答案:

答案 0 :(得分:1)

我偶然发现了类似的事情。我有结构Teachers - &gt; Users - &gt; Persons并希望按此人的姓名排序。

<强> TeachersController

public $paginate = ['sortWhitelist' => ['Persons.forename']];

查看

<?= $this->Paginator->sort('Persons.forename') ?>

因此,简而言之,我认为您只需更改第一个和第二个排序链接即可引用字段Users.idUsers.name