2014-04-07 42 views
1

我有一張帶發票的表格。每張發票都屬於一位用戶。每個用戶的自動增量

所以表格中有id,user_id列。

我想要第三列,例如基於用戶的自動增量的invoice_id。

因此,例如用戶1將有id 1,2,3,4,5,6,7,8...用戶發票2也將發票與id 1,2,3,4,5,6,7,8...

我知道我可以對特定的用戶檢查的最後一個值的函數,並分配下一步,但沒有其他「更容易」更正確的方式來做到這一點cakephpmysql

+0

也許這就是你要找的? http://stackoverflow.com/questions/979709/what-is-the-equivalent-to-getlastinsertid-in-cakephp – Duikboot

+0

根據您使用的數據庫引擎,您可能能夠利用複合主服務器key with autoincrement - http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html - 雖然我相信這隻適用於MySQL的MyISAM和BDB引擎....你不用沒有指定你正在使用哪個數據庫,所以我在猜測MySQL –

+0

我也看到了這種方法,但我更喜歡不使用只針對MyISAM的方法 – user3504209

回答

-1

架構中的添加

$t->addColumn('id', [ 
    'type' => 'integer', 
    'autoIncrement' => true, 
]) 
+0

這不起作用,因爲用戶1將例如具有發票1,2,4,8並且用戶2將具有3,5,6,7 .. – user3504209

0

你必須做一個beforeSave回調在Invoice型號

類似:

public function beforeSave($options = array()) 
{ 

    if(!$this->id) 
    { 
     $user_id = $this->data['Invoice']['user_id']; 
     $invoice = $this->find(
      'first', 
      array 
      (
       'fields' => array('MAX(invoice_id) AS invoice_id'), 
       'conditions' => array('Invoice.user_id' => $user_id) 
      ) 
     ); 
     $invoice_id = $invoice [0]['invoice_id'] + 1 ; 


     $this->data['Invoice']['invoice_id'] = $invoice_id ; 
    } 
    return true; 
} 

上面的代碼應該工作。無論如何,我不知道這是實現這一目標的最佳方式,所以請繼續尋找其他解決方案。