如何只选择第一个多对多记录并将其作为单独的关系?

Posted

技术标签:

【中文标题】如何只选择第一个多对多记录并将其作为单独的关系?【英文标题】:how to only pick the first many-to-many record and have it as a separate relation? 【发布时间】: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。这是不同的。

【问题讨论】:

***.com/questions/30241975/…的可能重复 我同意它相似但不完全相同,因为在该问题中关系是一对多,而我的问题更多是多对多。 【参考方案1】:

看看我解决类似问题的方法:

https://groups.google.com/forum/#!topic/cake-php/104XcwVG6WI

【讨论】:

以上是关于如何只选择第一个多对多记录并将其作为单独的关系?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite,多对多关系,如何聚合?

如何使用AND条件选择多对多关系中的记录[重复]

如何使用多对多关系

选择多对多关系的最新记录

如何从雄辩关系中的第三个表中获取数据雄辩的多对多关系

在 Django 中过滤第二级多对多关系