Ok, так что я нахожусь в рассоле, пытаясь найти способ для того, как сделать это:CakePHP - SQL запрос Регистрация
У меня есть живой поиск (с помощью Ajax), который позволяет пользователю выбрать критерии из выпадающий список, а затем введите значение, которое будет соответствовать значениям внутри базы данных. Это довольно тривиальный материал, и на прямых полях основной модели у меня нет никаких проблем.
У меня есть донор Модель/таблица, которая состоит из таких атрибутов, как ID, Name, Surname etc
, но что более важно, он также имеет FK
других связанные модели, такие как blood_group_id, donor_type_id,
, отображающие обратно на соответствующие модели (BloodGroup and DonorType
) .. Эти два уже установлены с ассоциациями, и я вне этой части, поскольку я уже получаю записи доноров с соответствующими данными модели.
Вот метод поиска, который, мы надеемся, поможет вам лучше понять мою проблему.
public function search() {
if($this->request->is('post')){
if(!empty($this->request->data)){
$criteria = $this->request->data['criteria'];
$query = $this->request->data['query'];
$conditions = array("Donor." .$criteria. " LIKE '". $query . "%'");
Вышеописанное проверяет, был ли отправлен запрос на отправку и были ли отправлены данные. Критерии и пользовательский ввод используются для построения запроса.
Здесь возникает моя проблема. (Когда пользователь выбирает поиск по типу крови, в качестве критерия от выпадающего списка), приведенное выше предполагает, что пользователь должен ввести идентификатор blood_group, а не A + или A. Например, если входной сигнал равен 1 (идентификатор группы крови A +), результаты возвращаются, как ожидалось. Но я хочу, чтобы пользователь мог ввести A + ...
Вот остальная часть методы:
$this->Paginator->settings = array(
'conditions' => $conditions,
'limit' => 2
);
$donors = $this->Paginator->paginate('Donor');
$this->set('donors', $donors);
$this->beforeRender();
$this->layout= 'ajax';
}
}
}
Я попробовал этот подход, создание условий, используя имя модели, такие как
if($criteria == 'blood_group_id'){
$conditions = array("BloodGroup.id" . " LIKE '". $query . "%'");
}elseif($criteria == 'donor_type_id'){
$conditions = array("DonorType.id" . " LIKE '". $query . "%'");
}else{
$this->Paginator->settings = array(
'conditions' => $conditions,
'limit' => 2
);
}
Но это возвращает все записи независимо от ввода.
Я также попытался изменить настройки для постраничной навигации не повезло
$settings = array(
'joins' => array(
'table' => 'blood_groups',
'alias' => 'BloodGroup',
'type' => 'LEFT',
'conditions' => array(
"BloodGroup.id" => "Donor.blood_group_id",
"AND" => $conditions
)
),
'limit'=> 2
);
Любая помощь на том, как сделать то, что я объяснил выше, было бы очень признателен!
как вы заполняете свои критерии dropwodn list? – arilia
@arilia жестко запрограммирован так: '' options '=> array ( ' id '=>' By ID ', ' name '=>' By Name ',' blood_group_id '=>' By Blood Type ' , 'type' => 'by Donor Type', 'age' => 'By Age', 'gender' => 'По полу' ) ' – LogixMaster