2017-02-28 109 views
0

用戶必須在URL中傳入一個查詢字符串,該字符串將返回不同的分頁,如果他沒有輸入任何一個或兩個查詢,結果將會改變。下面的代碼在CakePHP中起作用,但它看起來很可怕,如果沒有這些條件,還有更好的方法來實現我想要做的事情嗎?與查詢字符串不同的分頁條件[CakePHP 3]

if($this->request->query('date')) 
{ 
    $this->paginate = [ 
     'conditions' => [ 
      'Reservations.id_venue' => $this->Auth->user('id_venue_manager'), 
      'Reservations.date' => $this->request->query('date'), 
     ], 
    ]; 
} 
else if($this->request->query('id_user')) 
{ 
    $this->paginate = [ 
     'conditions' => [ 
      'Reservations.id_venue' => $this->Auth->user('id_venue_manager'), 
      'Reservations.id_user' => $this->request->query('id_user'), 
     ], 
    ]; 
} 
else if($this->request->query('id_user') && $this->request->query('date')) 
{ 
    $this->paginate = [ 
     'conditions' => [ 
      'Reservations.id_venue' => $this->Auth->user('id_venue_manager'), 
      'Reservations.id_user' => $this->request->query('id_user'), 
      'Reservations.date' => $this->request->query('date'), 
     ], 
    ]; 
} 
else 
{ 
    $this->paginate = [ 
     'conditions' => [ 
      'Reservations.id_venue' => $this->Auth->user('id_venue_manager'), 
     ], 
    ]; 
} 
+1

我會用這個插件,而不是https://github.com/FriendsOfCake/search :) – burzum

回答

0

試試這個

<?php 

public function someMethod() { 
    $this->paginate = [ 
     'conditions' => $this->getPaginationConditions(); 
    ]; 
} 

private function getPaginationConditions() 
{ 
    $conditions = ['Reservations.id_venue' => $this->Auth->user('id_venue_manager')]; 

    if ($date = $this->request->query('date')) { 
     $conditions['Reservations.date'] = $date; 
    } 

    if ($user = $this->request->query('id_user')) { 
     $conditions['Reservations.id_user'] = $user; 
    } 

    return $conditions; 
} 
+0

偉大工程的感謝! –