2017-02-28 107 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

伟大工程的感谢! –