Использование встроенной функции MySQL в активных записях (codeigniter) - PullRequest
5 голосов
/ 26 октября 2011

Я пытаюсь получить все данные, дата которых больше или равна сегодняшней. Вот что я делаю:

$this->db->select('id, name');
$this->db->where('dr', '1');
$this->db->where('end >=', 'CURDATE()');
$query = $this->db->get('store');

Но это не работает. Что я не так?

Ответы [ 2 ]

12 голосов
/ 26 октября 2011

Active Records автоматически экранирует ваш запрос, поэтому CURDATE () будет передана в виде строки вместо использования функции mysql.Вам лучше выполнить запрос вручную, например,

$query = $this->db->query("SELECT id,name FROM store WHERE dr = '1' AND end >= CURDATE()");

или , если вы все еще хотите использовать AR, вы можете передать FALSE в качестве третьего параметра $this->db->where, чтобы избежать автоматического выхода из CI:

$this->db->select('id,name')
         ->where('dr','1')
         ->where('end >=', 'CURDATE()', FALSE);
$query = $this->db->get('store');
3 голосов
/ 26 октября 2011

Я не использую активные записи в CI, но я предполагаю, что CURDATE() помещается в строку в запросе, поэтому он делает WHERE end >= 'CURDATE()', а не WHERE end >= CURDATE()

Если end является полем отметки времени try ...

$this->db->where('end >=', time());

Если end является полем даты и времени try ...

$this->db->where('end >=', date("Y-m-d H:i:s"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...