Пользовательский порядок CakePHP по предложению для автозаполнения jQuery - PullRequest
1 голос
/ 01 сентября 2010

У меня есть база данных мест, из которых пользователь может выбрать, набрав и автозаполнение. В моем контроллере CakePHP я делаю это:

    $locations = $this->Location->find('all', array(
        'conditions' => array('Location.name like' => '%'.$term.'%'),
        'fields' => array('Location.id', 'Location.name', 'Region.name'),
        'order' => array(
            array('Location.name = "'.mysql_real_escape_string($term).'"'
                => 'desc'),
            'Location.name'
        ),
        'limit' => 10,
        'recursive' => 1,
    ));

Он прекрасно работает, но выглядит как хак, и я бы предпочел сам не избегать SQL-литералов.

Требуется первый порядок по предложению, поскольку в противном случае идеальное совпадение могло бы не попасть в начало отсортированного по алфавиту списка.

Я подумал о переносе теста на равенство в виртуальное поле, но я не чувствую, что это очень элегантное решение, когда $ term является динамическим.

Как мне реализовать это лучше?

1 Ответ

0 голосов
/ 03 сентября 2010

Насколько написана структура вашего запроса, это нормально.

Что касается необходимости самостоятельно избегать SQL, это из Поваренной книги :

CakePHP уже защищает вас от SQL-инъекций, если вы используете методы ORM CakePHP (такие как find () и save ()) и правильная запись массива (т. е. массив ('field' => $ value)) вместо необработанного SQL.Для очистки от XSS обычно лучше сохранять необработанный HTML в базе данных без изменений и выполнять очистку во время вывода / отображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...