2015-11-23 2 views
0

У меня есть две таблицы: города и coutries.Результаты поиска Grocerycrud

CREATE TABLE IF NOT EXISTS `cities` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `country_id` int(10) not null, 
    `city` varchar(255) NOT NULL, 
    `active` int(1) not null, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (country_id) REFERENCES countries (id) 
) ENGINE=MyISAM; 

CREATE TABLE IF NOT EXISTS `countries` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `country` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM; 

Мой контроллер:

public function cities() { 

    $crud = new grocery_CRUD(); 
    $crud->set_theme('flexigrid'); 
    $crud->set_table('cities'); 
    $crud->where('active', 1); 
    $crud->set_relation('country_id', 'countries', 'country'); 
    $output = $crud->render(); 
    $this->_example_output($output); 
} 

    public function countries() { 

    $crud = new grocery_CRUD(); 
    $crud->set_theme('flexigrid'); 
    $crud->set_table('countries'); 
    $output = $crud->render(); 
    $this->_example_output($output); 
} 

Если я пытаюсь найти слово «Tor» я бы ожидал увидеть 1 строк, но я буду получать все строки! Зачем?

Мой выбор это:

SELECT `cities`.*, j93bfec8a.country AS s93bfec8a 
FROM `cities` 
LEFT JOIN `countries` as `j93bfec8a` ON `j93bfec8a`.`id` = `cities`.`country_id` 
WHERE `active` =0 
OR `j93bfec8a`.`country` LIKE '%Tor%' ESCAPE '!' 
OR `city` LIKE '%Tor%' ESCAPE '!' 
OR `active` LIKE '%Tor%' ESCAPE '!' 
HAVING `active` =0 
LIMIT 5 

города таблице:

id country_id city  active 

1  2  Paris  1 
2  2  Strasbourg 1 
3  1  Torino  0 
4  1  Milano  1 
6  1  Rome   0 

страны таблица:

id country 

    1 Italy 
    2 France 

Кто-то, чтобы помочь мне, пожалуйста!

Я использую grocerycrud v1.5.2 и codeigniter v3.0.3.

+0

Вы ожидаете 1 строку, но я не могу понять, если это правильно или нет. Я понятия не имею, как выглядит таблица городов. Также не уверен, почему вы определяете escape-символ. – rajah9

+0

извините! результат находится на рис.: http://i67.tinypic.com/316tdo9.jpg – corn

+0

и grocerycrud генерирует sql с escape-символом. – corn

ответ

0

Если вы посмотрите на свой запрос, это ожидаемый результат.

Похоже, что шаблон поиска добавляется как условие ИЛИ к фильтру crud-> where(). Итак, как у вас есть

WHERE `active` = 0 OR ... 

он отобразит ВСЕ записи, где это условие истинно. Я не знаю, является ли это предполагаемым поведением GroceryCRUD.

В любом случае, возможно, было бы лучше использовать model