2016-07-20 19 views
-1

Ich möchte meine Daten aus der Datenbank suchen durch Eingabe suchen, alles sieht richtig aus, aber ich kann nicht finden, warum dieser Code nicht funktioniert.Wenn ich die Suchdaten im Eingabefeld eingeben, ist keine Sache done.please HilfeSuche funktioniert nicht in CakePHP-3

Mein Controller: 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; 
} 

MY VIEW 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();?> 

Suche Es nicht work.please Hilfe

+0

Sie paginieren zwei mal und ich weiß nicht warum. Setzen Sie das Paginierungsarray vor dem 'paginate()' - Aufruf und entfernen Sie dann den zweiten Paginierungsaufruf. – arilia

+0

Fragen Sie sich, warum Sie zweimal paginieren und den doppelten Wert von $ adUnits setzen. Der zweite überschreibt den ersten und ist nutzlos. – arilia

+0

was meinst du mit nicht funktionieren? Haben Sie einen Fehler? – arilia

Antwort

0

allererst Code vereinfachen: Sie zwei Seitenzahlen ohne Gründe tun

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

} 

Wenn Sie immer noch Probleme haben, haben Sie wahrscheinlich einen Fehler in Ihrer Anfrage. Meine Vermutung ist, dass die name Spalten mehrdeutig ist so tun dies in Ihrem find() Anruf

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

als Randnotiz Ich schlage vor, Sie die Dokumentation zu lesen, insbesondere lernen, wie Sie Ihren Code debuggen.

Auch die _getData methos, meiner Meinung nach, sollte auf das Modell oder in eine Komponente verschoben werden.

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']); 

} 

Ersetzen mit

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

} 
+0

danke, aber nach dem Ersetzen mit diesem Code habe ich einen Fehler bekommen. "Fehler: Ein interner Fehler ist aufgetreten." – tanvir

+0

Ihr Debug-Modus ist aktiviert? –

+0

ok, Problem ist gelöst – tanvir