【问题标题】:How to control the fields to display for belongsToMany for pagination in Cake 3.x?如何在 Cake 3.x 中控制为 belongsToMany 显示分页的字段?
【发布时间】:2016-03-11 04:08:23
【问题描述】:

情况

使用Cake 3.2.4

我有一个EventTicketSales

那个

  $this->belongsToMany('Approvings', [
        'className' => 'Contacts',
        'joinTable' => 'event_ticket_sales_approvings',
        'targetForeignKey' => 'contact_id',
        'saveStrategy' => 'replace',
    ]);

所以当我在 EventTicketSales 表中进行分页时,我只想显示 Approvings 中的 2 个字段,即 Approvings.name 和 Approvings.company。

我尝试过的

我尝试了以下方法:

$this->paginate["contain"] = ["Approvings"];
$this->paginate['fields'] = [
            'EventTicketSales.id', 'EventTicketSales.event_id', 'EventTicketSales.billing_amount_in_sgd', 
            'EventTicketSales.payment_terms', 'EventTicketSales.invoice_number', 
            'EventTicketSales.due_date',
  'Approvings.id', 'Approvings.name', 'Approvings.company'
        ];

我收到一条关于 JsonSerialize 在不相关模型中的错误消息。

  [Exception] Failed calling App\Model\Entity\User::jsonSerialize() #0 /var/virtual/WebApps/corri/vendor/cakephp/cakephp/src/View/JsonView.php(0

我的预期

我预计结果如下:(我以 json 格式显示)

id: "06f39ba3-9a17-47c6-9374-24b49fb64665",
event_id: 7,
billing_amount_in_sgd: 7680.03,
payment_terms: "45 days",
invoice_number: "9191",
due_date: "2016-03-05T00:00:00+0800",
approvings: [
    {
        id: 63,
        name: "Jaime Jen",

        company: "Apple Company",

        _joinData: {
            contact_id: 63,
            id: 335,
            event_ticket_sale_id: "06f39ba3-9a17-47c6-9374-24b49fb64665",
            created: "2016-01-20T13:43:44+0800",
            modified: "2016-01-20T13:43:44+0800"
        }
    }
]

【问题讨论】:

  • 您的问题的格式很好,但请不要忘记“不起作用”绝不是正确的问题描述!我很确定您遇到了异常,这应该是您的问题。
  • 已更改。很抱歉。

标签: cakephp pagination cakephp-3.0


【解决方案1】:

paginators fields 选项正在应用于主查询查找器,并且由于 belongsToMany 关联是通过单独的查询检索的,因此该选项不会对其产生任何影响。

相反,您必须相应地配置您的容器,即使用回调或fields 选项。另请注意,当限制 hasManybelongsToMany 关联时,您还必须选择正确的外键。

$this->paginate['contain'] = [
    'Approvings' => function (\Cake\ORM\Query $query) {
        return $query->select([
            'Approvings.id',
            'Approvings.name',
            'Approvings.company',
            'EventTicketSalesApprovings.event_ticket_sale_id'
        ]);
    }
];

另见

【讨论】:

  • 这行得通,但文档并没有自动让我认为我可以在分页中做到这一点。我正在尝试将其写入以使其更明确。
  • 我有一个单独的问题,关于减少为 _joinData stackoverflow.com/questions/35957632/… 检索的字段数量
猜你喜欢
  • 1970-01-01
  • 2016-06-27
  • 2023-03-14
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多