У меня есть база данных мест, из которых пользователь может выбрать, набрав и автозаполнение. В моем контроллере 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 является динамическим.
Как мне реализовать это лучше?