Cakephp 如何减少Cake 3.x中joinData的字段数量? 处境

Cakephp 如何减少Cake 3.x中joinData的字段数量? 处境,cakephp,cakephp-3.0,contains,Cakephp,Cakephp 3.0,Contains,使用Cake 3.2.4 我有一张EventTicketSales表格 那 当我这样分页时: $this->paginate['contain'] = [ 'Approvings' => function (\Cake\ORM\Query $query) { return $query->select([ 'Approvings.id',

使用
Cake 3.2.4

我有一张
EventTicketSales
表格

当我这样分页时:

       $this->paginate['contain'] = [
            'Approvings' => function (\Cake\ORM\Query $query) {
                return $query->select([
                    'Approvings.id',
                    'Approvings.name',
                    'Approvings.company',
                    'EventTicketSalesApprovings.event_ticket_sale_id'
                ]);
            }
        ];
        $this->paginate['fields'] = [
            'EventTicketSales.id', 'EventTicketSales.event_id', 'EventTicketSales.billing_amount_in_sgd', 
            'EventTicketSales.payment_terms', 'EventTicketSales.invoice_number', 
            'EventTicketSales.due_date',
        ];
我得到以下数据:

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"
        }
    }
]
我想要什么 我还想控制从
\u joinData

理想情况下,我希望从joinData中检索尽可能少的字段

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: {
            id: 335,
            contact_id: 63,
            event_ticket_sale_id: "06f39ba3-9a17-47c6-9374-24b49fb64665",
        }
    }
]

如果我能帮上忙,我实际上甚至不需要_joinData。

例如,您可以迭代集合并删除您不感兴趣的属性,例如:

$eventTicketSales->map(function ($row) {
    foreach ($row['approvings'] as &$approving) {
        unset($approving['_joinData']);
    }

    return $row;
});
这也可以在查询对象的结果格式化程序中完成:

$query->formatResults(function (\Cake\Collection\CollectionInterface $results) {
    return $results->map(function ($row) {
        foreach ($row['approvings'] as &$approving) {
            unset($approving['_joinData']);
        }

        return $row;
    });
});
或者,由于您似乎希望在JSON表示中应用此属性,您可以将
批准
实体的
\u joinData
属性标记为隐藏,因为您通常希望在将实体转换为数组或JSON时放弃该属性:

class Approving extends Entity {
    // ...

    protected $_hidden = [
        '_joinData'
    ];

    // ...
}
另见


当我尝试执行$this->log($row)。。我看到没有数据。有一个活动,门票,销售,批准。我取消设置($row->事件\门票\销售\批准)。我得到了jsonSerialize错误。是的,我忘了在计算查询之后应用关联结果注入器。我已经更新了我的答案@Kimstacki更喜欢
protected$\u hidden=
方式。感谢与belongtomany关联的模型没有work@giuseppe问题是关于以下方面的
,示例通常可以应用/调整到任何类型的相关数据。如果你有任何问题,你需要更具体一点,你到底在做什么,到底发生了什么。您可能需要为此打开一个新问题,您可以在其中添加示例代码并详细说明问题。
class Approving extends Entity {
    // ...

    protected $_hidden = [
        '_joinData'
    ];

    // ...
}