Добавьте предложение в оператор MySQL без кавычек, используя функции Active Record CodeIgniter. - PullRequest
18 голосов
/ 16 января 2010

Я хотел обновить строку, используя активные записи в codeigniter, и я только хочу увеличить значение поля (receive_qty = receive_qty +1), я понял, что могу сделать это в обычном sql, но я не могу в активных записях codeigniter

$update['received_qty'] = 'received_qty + 1';
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);

Кто-нибудь знает, как это сделать, используя активные записи?

Ответы [ 5 ]

37 голосов
/ 19 января 2010

Это будет работать.

$this->db->set('received_qty', 'received_qty + 1', FALSE);
$this->db->set('received_date', date("Y-m-d"));
$this->db->where($where);
$this->db->update('vrs_distribution');

ActiveRecord экранирует все, что помещено в set (), where () и многие другие методы. Где и set могут принимать необязательный третий параметр $ escape, который является логическим значением. Установите его в FALSE, и CodeIgniter ничего не пропустит, что означает, что ваш прирост поля не будет рассматриваться как строка.

2 голосов
/ 16 января 2010

Или вы можете сделать:

$this->db->query('UPDATE vrs_distribution SET received_qty = received_qty + 1, received_date = CURDATE() WHERE id = ' . $id);

Вы должны будете изменить предложение WHERE, чтобы удовлетворить вас, хотя

0 голосов
/ 01 июля 2015

Я собирался задать похожий вопрос немного по-другому, но проблема была та же: мне нужно было обновить дату с интервалом (expiry_date = expiry_date + interval 3 month) и Фил Стерджен ответ действительно решил проблему.

Однако я понял, что вы все еще можете использовать массив для полей, которые могут иметь кавычки, что означает, что вы можете написать:

$this->db->set('received_qty', 'received_qty + 1', FALSE);
$this->db->set('expired_date', 'CURDATE() + INTERVAL 10 DAY', FALSE); //extra example 1
$update['received_date'] = date("Y-m-d");
$update['receiver'] = $receiver_name; //extra example 2
$this->db->where($where);
$this->db->update('vrs_distribution', $update);

Где $this->db->last_query() выведет:

UPDATE `vrs_distribution`
  SET `received_qty` = received_qty + 1,
      `expiry_date` = CURDATE() + INTERVAL 10 DAY, #extra example 1
      `received_date` = '2015-07-01 16:00:00',
      `receiver` = 'strike_noir', #extra example 2
  WHERE #where clause with backticks

Обратите внимание, что поля, в которых использовался set(), не имеют кавычек и появляются в первую очередь. Остальная часть запроса имеет обратные метки (что позволяет " CodeIgniter защитить оставшиеся поля ").

0 голосов
/ 06 июля 2011

статус установлен на ноль (обновление)

$this->db->set('IsCurrent', '0');       
$this->db->where('AcademicYearID',$academicYearId);
$this->db->update('academicyear');  
0 голосов
/ 16 января 2010

Вы, кажется, довольно близки, в ActiveRecord CI (или в этом отношении в SQL) нет команды «увеличение на единицу».

$update['received_qty']++;
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...