У меня есть страница для просмотра записей БД.Зритель может фильтровать записи по категориям, авторам и тегам.Я использую форму вместо сегментов URL для фильтрации записей (это кажется более безопасным, потому что я могу проверять входные данные.)
Например, когда заполнены все входные данные формы, запрос выглядит так:
SELECT * FROM (`posts`) WHERE `category` = 'technolgy' AND `author` = 'lila' AND `tags` = 'ebook'
Однако, если один или несколько входов пуст, я не получаю результатов.Например:
SELECT * FROM (`posts`) WHERE `category` = '' AND `author` = 'lila' AND `tags` = ''
Я хочу, чтобы входные данные были необязательными, поэтому, например, если введено только author name
, я могу вернуть записи, сделанные этим автором, независимо от категории и тегов.Как я могу опустить предложение and where
, если оно пустое?
Примечание: предложение or_where
не является решением, поскольку оно не возвращает точный запрос, если все входные данные фильтра заполнены.
Моя модель
function filter($form_values)
{
$query = $this->db->get('posts');
$this->db->where($form_values); //adds clause to all array items
return $query->result();
}
Параметр функции представляет собой массив с входными значениями с моей точки зрения.Например,
$form_values = array('category' => $category, 'author' => $author, 'tags' => $tags);
и мой вид
$form_values = array (
'category' => $this->input->post('category'),
'author' => $this->input->post('author'),
'tags' => $this->input->post('tags')
);
$this->Records_model->filter($form_values);
Я знаю, что в Codeigniter, если $_POST'
пусто, они установлены в FALSE
.Можно ли это использовать для достижения того, что я пытаюсь?Я не уверен, что я на правильном пути