我的表如下:通過EventTicketSalesApprovings
如何挑選第一個多對多記錄並將其作爲單獨的關係?
EventTicketSales
belongsToMany Approvings
。
裏面EventTicketSalesTable.php
我寫
$this->belongsToMany('Approvings', [
'className' => 'Contacts',
'joinTable' => 'event_ticket_sales_approvings',
'targetForeignKey' => 'contact_id',
'saveStrategy' => 'replace',
]);
當我做分頁,我寫
$contain = [
'Approvings'
];
$sales = $this->paginate($this->EventTicketSales->find()->where($conditions)->join($join)->contain($contain));
的search.ctp裏面,我寫
<?php foreach($eventTicketSales as $eventTicketSale):?>
<tr>
<td>
<?= $eventTicketSale->approvings[0]->company ?>
</td>
</tr>
我想是什麼
- 保持很多的接觸表和
event_ticket_sales
表作爲Approvings關係之間的多對多關係, - ,但有一個辦法來查詢僅第一隻審批
爲什麼?
原因是這個查詢我只需要顯示頁面中的第一個批准聯繫人,並仍然保持分頁。
我希望查詢的效率儘可能高。
如果有更好的方法來完成這個連接而不是包含,我會很樂意這樣做。
什麼定義爲首批審批聯繫人?
假設我們有一個event_ticket_sales
有兩個批准。表中最小的id
在event_ticket_sales_approvings
中的第一個是第一個。是的id
是主整數自動增量。
上述分頁查詢中的條件是什麼?
$conditions = [
'OR' => [
['EventTicketSales.invoice_number LIKE' => '%'.$data['search_field'].'%'],
['EventTicketSales.receipt_number LIKE' => '%'.$data['search_field'].'%'],
['ApprovingsContacts.company LIKE' => '%'.$data['search_field'].'%'],
]
];
UPDATE
我明白,有一個類似的問題在這裏How to limit contained associations per record/group?
不過,我想指出:
- 這個問題,試圖找到文章及其得分最高的摘要。因此文章有很多摘要和摘要屬於文章
- 在我的情況下,EventTicketSales屬於許多通過EventTicketSalesApprovings批准。這是不同的。
的可能的複製http://stackoverflow.com/questions/30241975/loading-associated-model-data-in-cakephp3 –
我同意它是相似的,但不完全相同,因爲在這個問題中,這種關係是一對多的關係,而我的問題更多的是多對多的關係。 –