2016-07-20 112 views
-1

我想通過搜索輸入從數據庫中搜索我的數據,一切都看起來不錯,但我找不到爲什麼這個代碼不工作。當我在輸入框中輸入搜索數據時, done.please幫助搜索不能在cakephp-3中工作

我的控制器:AdUnitsController

class AdUnitsController extends AppController 

{

public function index() 
{ 

    $query = $this->_getData(); 
    $this->set('adUnits', $this->paginate($query)); 

    $this->paginate = [ 
     'contain' => ['Networks', 'Games', 'AdTypes'] 
    ]; 

    $adUnits = $this->paginate($this->AdUnits); 

    $this->set(compact('adUnits')); 
    $this->set('_serialize', ['adUnits']); 

} 

public function _getData() 
{ 
    if (!empty($this->request->data['search'])) { 
     $search = $this->request->data['search']; 
     $query = $this->AdUnits->find('All')->where([ 
      'OR' => [ 
       ['name LIKE' => '%' . $search . '%'], 
      ], 
     ]); 
    } 
    else{ 
     $query = $this->AdUnits->find('All'); 
    } 
    return $query; 
} 

我看來index.ctp:

 <label> Search</label> 
     <?php echo $this->Form->create('AdUnits',array('id' => 'site-search','url'=>array('action'=>'index')));?> 
     <div> 
      <?php echo $this->Form->input('search',array('class' => 'form-control', 'label' =>false, 'placeholder' => 'Type Network')); ?> 
     </div> 

     <div> <button type="submit"> Search</button> 

      <?php echo $this->Form->end();?> 

搜索有沒有work.please幫助

+0

你分兩次,我不知道爲什麼。在paginate()調用之前設置分頁數組,然後刪除第二個分頁調用 – arilia

+0

問問自己爲什麼要分兩次並設置兩次$ adUnits的值。第二個覆蓋第一個,沒用。 – arilia

+0

你的意思是不工作?你有什麼錯誤嗎? – arilia

回答

0

首先是簡化您的代碼替換:你正在做兩個paginations沒有理由

public function index() 
{ 
    $this->paginate = [ 
     'contain' => ['Networks', 'Games', 'AdTypes'] 
    ]; 
    $query = $this->_getData(); 
    $this->set('adUnits', $this->paginate($query)); 

} 

如果您仍然遇到問題,可能是您的查詢中有錯誤。我的猜測是,name列是ambigous這樣做在您的通話find()

['AdUnits.name LIKE' => '%' . $search . '%'] 

作爲一個方面說明,我建議你閱讀文檔,特別是學習如何調試代碼。

此外,在我看來,應該將_getData方法轉移到模型或組件中。

0
public function index() 
{ 

    $query = $this->_getData(); 
    $this->set('adUnits', $this->paginate($query)); 

    $this->paginate = [ 
     'contain' => ['Networks', 'Games', 'AdTypes'] 
    ]; 

    $adUnits = $this->paginate($this->AdUnits); 

    $this->set(compact('adUnits')); 
    $this->set('_serialize', ['adUnits']); 

} 

public function index() 
{ 
    $this->paginate = [ 
     'contain' => ['Networks', 'Games', 'AdTypes'] 
    ]; 
    $query = $this->_getData(); 
    $this->set('adUnits', $this->paginate($query)); 

} 
+0

謝謝,但用此代碼替換後,我得到一個錯誤。「錯誤:發生內部錯誤。」 – tanvir

+0

您的調試模式是否啓用? –

+0

好的,問題解決了 – tanvir