Подтвердить что ты не робот

Добавить предложение в инструкцию MySQL без кавычек с использованием функций Active Record для CodeIgniter

Я хотел обновить строку, используя активные записи в codeigniter, и я хочу только увеличить значение поля (received_qty = received_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);

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

4b9b3361

Ответ 1

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

$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 избегает всего, что помещается в набор(), где() и многие другие методы. Где и набор может оба взять дополнительный третий параметр $escape, который является логическим. Установите его в ЛОЖЬ, а CodeIgniter ничего не убежит, что означает, что приращение вашего поля не будет рассматриваться как строка.

Ответ 2

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

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

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

Ответ 3

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

$this->db->set('IsCurrent', '0');       
$this->db->where('AcademicYearID',$academicYearId);
$this->db->update('academicyear');  

Ответ 4

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

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

$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 защищать оставшиеся поля").

Ответ 5

Вы выглядите довольно близко, в CI ActiveRecord (или в SQL) нет команды "increment by one".

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