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

时间:2015-10-03 12:15:54

标签: pagination cakephp-3.0

我的表格如下:

EventTicketSales viaToMany 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>

我想要的是

  1. 将联系人表与event_ticket_sales表之间的多对多关系保持为审批关系,
  2. 但有办法只查询第一个仅审批
  3. 为什么吗

    原因是这个查询我只需要在页面中显示第一个批准的联系人,并且仍然保持分页。

    我希望查询尽可能高效。

    如果使用连接而不是包含更好的方法来执行此操作,我将很乐意这样做。

    什么定义为第一个批准联系人?

    假设我们有event_ticket_sales有2个批准。 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'].'%'],
                    ]
                ];
    

    更新

    我很欣赏这里有一个类似的问题How to limit contained associations per record/group?

    但是,我想说明:

    1. 这个问题试图找到文章及其得分最高的摘要。因此文章有很多摘要和摘要属于文章
    2. 就我而言,EventTicketSales通过EventTicketSalesApprovings属于ToMany Approvings。哪个是不同的。

1 个答案:

答案 0 :(得分:0)

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

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