2015-10-03 31 views
0

我的表如下:通過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> 

我想是什麼

  1. 保持很多的接觸表和event_ticket_sales表作爲Approvings關係之間的多對多關係,
  2. ,但有一個辦法來查詢僅第一隻審批

爲什麼?

原因是這個查詢我只需要顯示頁面中的第一個批准聯繫人,並仍然保持分頁。

我希望查詢的效率儘可能高。

如果有更好的方法來完成這個連接而不是包含,我會很樂意這樣做。

什麼定義爲首批審批聯繫人?

假設我們有一個event_ticket_sales有兩個批准。表中最小的idevent_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?

不過,我想指出:

  1. 這個問題,試圖找到文章及其得分最高的摘要。因此文章有很多摘要和摘要屬於文章
  2. 在我的情況下,EventTicketSales屬於許多通過EventTicketSalesApprovings批准。這是不同的。
+0

的可能的複製http://stackoverflow.com/questions/30241975/loading-associated-model-data-in-cakephp3 –

+0

我同意它是相似的,但不完全相同,因爲在這個問題中,這種關係是一對多的關係,而我的問題更多的是多對多的關係。 –

回答

相關問題