2012-03-06 36 views
7

Đây là câu hỏi mà tôi đang cố gắng để đạt được qua kỷ lục hoạt động:CodeIgniter kỷ lục hoạt động cập nhật tuyên bố với một tham gia

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'; 

Đây là nỗ lực của tôi tại các bản ghi hoạt động:

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

Và đây là truy vấn thực sự được sản xuất:

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

Tại sao bản ghi hoạt động này không áp dụng liên kết của tôi se?

+0

Tôi chưa bao giờ cố gắng đa-chaining trong hồ sơ hoạt động CodeIgniter của. Tôi luôn sử dụng chế độ bình thường và nó luôn làm việc say mê. Bạn cũng kiểm tra phiên bản thông thường của truy vấn và cung cấp cho chúng tôi phản hồi. –

+0

Đa chuỗi trong hồ sơ hoạt động rất dễ dàng. Tôi làm nó suốt. Các truy vấn mà tôi đang cố gắng để đạt được hoạt động tốt khi chạy bằng tay trong trình soạn thảo sql của tôi. – Catfish

Trả lời

16

Giải pháp dưới đây như thế nào? Một chút xấu xí nhưng nó đạt được những gì bạn mong đợi trong câu hỏi của bạn.

$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

Đó là một chút xấu xí, nhưng nó đã làm các trick. – Catfish

+1

Vâng, tôi đồng ý. Nhưng nếu bạn có một truy vấn rất phức tạp, tôi nghĩ rằng để làm cho sql vẫn có thể đọc được, chỉ cần dự phòng cho truy vấn '$ this-> db->(); ' – Jasonw

+0

Tôi không đồng ý. Con người có thể đọc được! = An toàn và bảo mật. hồ sơ hoạt động ngăn ngừa tiêm sql. – Catfish

1

Thậm chí sạch hơn, vì bản cập nhật chấp nhận một "ở đâu" tham số mảng thứ ba:

$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)); 
Các vấn đề liên quan