tutorial registro proyecto paso instalar estructura eliminar editar curso codigofacilito activerecord codeigniter

activerecord - registro - proyecto codeigniter paso a paso



Agregue una cláusula a una instrucción MySQL sin comillas usando las funciones Active Record de CodeIgniter (5)

Quería actualizar una fila usando registros activos en codeigniter, y solo quiero incrementar el valor de un campo (received_qty = received_qty +1), me di cuenta de que puedo hacerlo en sql habitual, pero no puedo en los registros activos de codeigniter

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

Alguien sabe cómo hacerlo usando registros activos?


O puedes hacer:

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

Debería modificar la cláusula WHERE para que se adecue a usted


Pareces bastante cercano, no hay un comando de "incremento por uno" en ActiveRecord de CI (o en SQL para el caso).

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


Esto funcionará

$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 escapa todo puesto en un conjunto (), donde () y muchos otros métodos. Where y set pueden tomar un tercer parámetro opcional de $ escape que es un booleano. Establézcalo en FALSE y CodeIgniter no escapará a nada, lo que significa que su incremento de campo no se tratará como una cadena.


estado configurado a cero (Actualización)

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


Iba a hacer una pregunta similar un poco diferente, pero el problema era el mismo: necesitaba actualizar una fecha con un intervalo ( expiry_date = expiry_date + interval 3 month ) y la respuesta de Phil Sturgeon resolvió el problema.

Sin embargo, me di cuenta de que todavía puede usar la matriz para los campos que pueden tener comillas, lo que significa que podría escribir:

$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);

Donde $this->db->last_query() daría como resultado:

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

Tenga en cuenta que los campos donde se usó set() no tienen comillas y aparecen en primer lugar. El resto de la consulta tiene respaldos (permitiendo que " CodeIgniter proteja los campos restantes ").