【发布时间】:2015-10-03 12:15:54
【问题描述】:
我的表格如下:
EventTicketSalesbelongsToMany Approvings 通过EventTicketSalesApprovings。
在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表之间的多对多关系保持为批准关系, - 但有办法只查询第一个 Approving only
为什么?
原因是这个查询我只需要在页面中显示第一个批准的联系人并且仍然保持分页。
我希望查询尽可能高效。
如果有更好的方法来使用连接而不是包含,我会很乐意这样做。
什么是第一个批准联系人?
假设我们有一个 event_ticket_sales 有 2 个批准。 event_ticket_sales_approvings 表中的id 最小的是第一个。是的,id 是主整数自动增量。
上述分页查询的条件是什么?
$conditions = [
'OR' => [
['EventTicketSales.invoice_number LIKE' => '%'.$data['search_field'].'%'],
['EventTicketSales.receipt_number LIKE' => '%'.$data['search_field'].'%'],
['ApprovingsContacts.company LIKE' => '%'.$data['search_field'].'%'],
]
];
更新
感谢How to limit contained associations per record/group?这里有类似的问题
但是,我想说:
- 该问题正在尝试查找文章及其得分最高的摘要。因此文章有很多摘要,摘要属于文章
- 在我的例子中,EventTicketSales 通过 EventTicketSalesApprovings 属于ToMany Approvings。这是不同的。
【问题讨论】:
-
我同意它相似但不完全相同,因为在该问题中关系是一对多,而我的问题更多是多对多。