2009-03-27 13 views

Antwort

0

views/users/index.ctp

<fieldset> 
    <legend>Filter users</legend> 
    <?php 
     echo $form->create('User', array('action' => 'index')); 
     echo $form->input('surname', array('div' => false)); 
     echo $form->submit('Filter', array('div' => false)); 
     echo $form->end(); 
    ?> 
</fieldset> 

Controller/users_controller.php

public function index($surname = null) { 
    // post-redirect-get 
    if ($this->data['User']['surname']) { 
     $this->redirect(array('id' => $this->data['User']['surname'])); 
    } 
    // conditions 
    $conditions = null; 
    if ($surname) { 
     $conditions = array('surname LIKE' => '%' . $surname . '%'); 
    } 
    // find 
    $users = $this->Users->find('all', array('conditions' => $conditions)); 
    // set 
    $this->set(compact('users')); 
} 
0

Sie müssen sich an den FINDBY Methoden suchen, die CakePHP bietet.

zusätzlich zu Ihrem Standard findAll() Sie eine Reihe von „Magie“ FINDBY Methoden haben, die es Ihnen ermöglichen, eine Spalte in der Tabelle angeben, indem Sie suchen:

$this->User->findBySurname($surname); 

Sie haben findBySql auch (Erklärung) wodurch Sie eine benutzerdefinierte SQL-Anweisung verwenden können. Sie könnten so eine LIKE-Anweisung auszuführen, wie folgt:

$users = $this->User->findBySql("SELECT * FROM USERS u WHERE u.SURNAME LIKE '%" . $surname . "%' ORDERBY SURNAME"); 

, dass Sie eine Liste der passenden Benutzer angezeigt werden können, die Sie dann dem Benutzer angezeigt werden kann. Es ist nicht die effizienteste Abfrage, aber es funktioniert.

+1

-1 gewartet SQL-Injection passieren. Wird die Abstimmung rückgängig machen, wenn Sie es beheben. –

+0

Ich denke, Sie haben den Punkt verpasst, ich habe gesagt, Sie könnten eine Aussage wie die oben genannte verwenden - nicht, dass dies die gegebene Lösung ist. Der obige Code ist ein Punkt in die richtige Richtung mit findBySql ... – Jon

+1

Der Punkt ist breiter als das, jemand aus einer Suchmaschine ist ziemlich wahrscheinlich, den Code direkt in ihre Anwendung zu kopieren. –

Verwandte Themen