2009-03-27 5 views

Répondre

0

vues/utilisateurs/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> 

contrôleurs/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

Vous devez regarder les méthodes findby fournies par CakePHP.

en plus de votre findAll standard(), vous avez un certain nombre de « magiques » des méthodes de findBy qui vous permettent de spécifier une colonne dans la table de recherche par:

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

Vous avez également findBySql (déclaration) ce qui vous permet d'utiliser une instruction SQL personnalisée. Vous pouvez l'utiliser pour exécuter une instruction LIKE comme suit:

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

Cela vous renvoie une liste d'utilisateurs correspondant que vous pouvez afficher à l'utilisateur. Ce n'est pas la requête la plus efficace, mais cela fonctionne.

+1

-1 pour injection sql attente de se produire. Va renverser le vote si vous le réparez. –

+0

Je pense que vous avez manqué le point, j'ai dit que vous "pourriez" utiliser une déclaration comme celle ci-dessus - pas que ce soit la solution donnée. Le code ci-dessus est un point dans la bonne direction en utilisant findBySql ... – Jon

+1

Le point est plus large que cela, quelqu'un venant d'un moteur de recherche est assez susceptible de copier le code directement dans leur application. –

Questions connexes