2017-04-15 11 views
0

私は、イグナイター/ phpのコードを新規に作成しました。自動インクリメントコードイグナイターの請求書ID

私は

$invoice_no = rand(9999,9999999999); 

のようにランダムに生成された請求書番号を使用していた。しかし、今、私は請求書番号をインクリメントし、それにプレフィックスとして現在の年を追加したかったの前に。しかし、どこかでこのコードが実行に失敗したので間違っています。ある人が私を正しい方向に向けることができますか?

私のモデルである...

function insertInvoice($data) 
{ 
    $this->db->trans_begin(); 
    $invoice = array(); 
    if(!empty($data['client_id'])) 
    { 
    $invoice['invoice_client_id'] = $data['client_id']; 
    }else{ 
    $client_data = array(
     'client_name' => $data['customername'], 
     'client_address1' => $data['address1'] 
    ); 
    $this->db->insert('client_details', $client_data); 
    $insert_id = $this->db->insert_id(); 
    $invoice['invoice_client_id'] = $insert_id; 
    } 




$query = $this->db->query("SELECT * FROM invoice ORDER BY invoice_id DESC LIMIT 1"); 
$result = $query->result_array(0); 
$result ++; 
$curYear = date('Y'); 
$invoice_no = $curYear . '-' .$result; 
$invoice['invoice_no'] = $invoice_no; 
$invoice['invoice_subtotal'] = $data['subTotal']; 
    $invoice['invoice_tax'] = $data['tax']; 
    $invoice['invoice_tax_amount'] = $data['taxAmount']; 
    $invoice['invoice_total'] = $data['totalAftertax']; 
    $invoice['invoice_total_extra'] = $data['totalextra']; 
    $invoice['invoice_rent'] = $data['rent']; 
    $invoice['invoice_paid'] = $data['amountPaid']; 
    $invoice['invoice_due'] = $data['amountDue']; 
    $invoice['invoice_desc'] = $data['notes']; 
    $invoice['invoice_items_count'] = $data['item_count']; 
    $invoice['invoice_extra_count'] = $data['extra_count']; 
    $invoice['invoice_miscellaneous'] = $data['miscellaneous']; 
    $this->db->insert('invoice', $invoice); 

    $i=1; 
    do { 
    $items = array(
     'invoice_no' => $invoice_no, 
     'item_name' => $data['invoice']['product_name'][$i], 
     'item_price' => $data['invoice']['product_price'][$i], 
     'item_qty' => $data['invoice']['product_qty'][$i], 
     'item_total' => $data['invoice']['total'][$i], 
     'item_noof_crate_wait' => $data['invoice']['noof_crate_wait'][$i], 
     'item_crate_wait' => $data['invoice']['crate_wait'][$i], 
     'item_choot' => $data['invoice']['choot'][$i], 
     'item_net_quantity' => $data['invoice']['net_qty'][$i] 
    ); 
    $this->db->insert('invoice_items',$items); 
    $i++; 
    } while($i<$data['item_count']); 
    $j=1; 
    do { 
    $extraitems = array(
     'invoice_no' => $invoice_no, 
     'extra_item_name' => $data['extra']['name'][$j], 
     'extra_item_qunatity' => $data['extra']['qty'][$j], 
     'extra_item_price' => $data['extra']['price'][$j], 
     'extra_item_total' => $data['extra']['total'][$j] 
    ); 
    $this->db->insert('extra_items',$extraitems); 
    $j++; 
    } while($j<$data['extra_count']); 
    if ($this->db->trans_status() === FALSE) 
    { 
    $this->db->trans_rollback(); 
    return FALSE; 
    } 
    else 
    { 
    $this->db->trans_commit(); 
    return TRUE; 
    } 
} 

invoice_idは、DBの主キーです。

答えて

1

結果の配列を増やそうとしていますが、本当に必要なのは、フィールド値を取得して増やすことです。

//you only need one field so ask only for that 
$query = $this->db->query("SELECT invoice_id FROM invoice ORDER BY invoice_id DESC LIMIT 1"); 

//you really should check to make sure $query is set 
// before trying to get a value from it. 
//You can add that yourself 
//Asked for only one row, so only retrieve one row -> and its contents 
$result = $query->row()->invoice_id; 
$result ++; 
... 
+0

ありがとうございました。はい、あなたは正しかった私はちょうど私がインベントリ番号をインクリメントしているので、私はちょうど1つのフィールドが必要です.As @ gagansheraは、文字列として配列を使用するため、エラーが発生していたと指摘... – Srav

0

私はあなたが "Object conversion to String error"を受けていると推測しています。$invoice_no = $curYear . '-' .$result; $resultにはオブジェクトが含まれており、文字列として使用しています。変数$resultを印刷して、割り当てられたデータの使用方法を確認します。

+0

ありがとうございます。あなたは正しいです。 @DFriendが指摘したように、DBから複数のフィールド値も取得していましたが、1つだけ必要でした。 – Srav