2012-03-06 32 views
7

Esta es la consulta que yo estoy tratando de lograr a través de registro activo:CodeIgniter registro activo instrucción de actualización con una unirse

UPDATE `Customer_donations` cd 
join Invoices i on i.cd_id = cd.cd_id 
set cd.amount = '4', cd.amount_verified = '1' 
WHERE i.invoice_id = '13'; 

Ésta es mi tentativa en el registro activo:

$data = array('cd.amount'=>$amount, 'cd.amount_verified'=>'1'); 
$this->db->join('Invoices i', 'i.cd_id = cd.cd_id') 
    ->where('i.invoice_id', $invoiceId); 


// update the table with the new data 
if($this->db->update('Customer_donations cd', $data)) { 
    return true; 
} 

Y esta es la consulta que en realidad se está produciendo:

UPDATE `Customer_donations` cd 
SET `cd`.`amount` = '1', `cd`.`amount_verified` = '1' 
WHERE `i`.`invoice_id` = '13' 

¿Por qué esta declaración de registro activa no aplica mi join clau? se?

+0

nunca he probado varios encadenamiento de registro activo de CodeIgniter. Siempre uso el modo normal y siempre funcionó como un encanto. También prueba la versión normal de la consulta y nos da su opinión. –

+0

Multi encadenamiento en registro activo es fácil. Lo hago todo el tiempo. La consulta que estoy tratando de lograr funciona bien cuando se ejecuta manualmente en mi editor sql. – Catfish

Respuesta

16

¿Qué tal la solución a continuación? Un poco feo pero logró lo que esperabas en tu pregunta.

$invoiceId = 13; 
$amount = 4; 
$data = array('cd.amount'=>$amount, 'cd.amount_verified'=>'1'); 

$this->db->where('i.invoice_id', $invoiceId); 

$this->db->update('Customer_donations cd join Invoices i on i.cd_id = cd.cd_id', $data); 
+1

Es un poco feo, pero funcionó. – Catfish

+1

Sí, estoy de acuerdo. Pero si tiene una consulta muy compleja, creo que la sql aún es legible por humanos, simplemente recurriendo a la consulta '$ this-> db->();' – Jasonw

+0

No estoy de acuerdo. Humano legible! = Seguro y protegido. registro activo previene la inyección sql. – Catfish

1

aún más limpio, desde la actualización acepta una tercera "donde" parámetro de matriz:

$invoiceId = 13; 
$amount = 4; 
$data = array('cd.amount'=>$amount, 'cd.amount_verified'=>'1'); 
$this->db->update('Customer_donations cd join Invoices i on i.cd_id = cd.cd_id', 
    $data, array('i.invoice_id' => $invoiceId)); 
Cuestiones relacionadas