我有一張帶發票的表格。每張發票都屬於一位用戶。每個用戶的自動增量
所以表格中有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...
我知道我可以對特定的用戶檢查的最後一個值的函數,並分配下一步,但沒有其他「更容易」更正確的方式來做到這一點cakephp
或mysql
?
我有一張帶發票的表格。每張發票都屬於一位用戶。每個用戶的自動增量
所以表格中有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...
我知道我可以對特定的用戶檢查的最後一個值的函數,並分配下一步,但沒有其他「更容易」更正確的方式來做到這一點cakephp
或mysql
?
架構中的添加
$t->addColumn('id', [
'type' => 'integer',
'autoIncrement' => true,
])
這不起作用,因爲用戶1將例如具有發票1,2,4,8並且用戶2將具有3,5,6,7 .. – user3504209
你必須做一個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;
}
上面的代碼應該工作。無論如何,我不知道這是實現這一目標的最佳方式,所以請繼續尋找其他解決方案。
也許這就是你要找的? http://stackoverflow.com/questions/979709/what-is-the-equivalent-to-getlastinsertid-in-cakephp – Duikboot
根據您使用的數據庫引擎,您可能能夠利用複合主服務器key with autoincrement - http://dev.mysql.com/doc/refman/5.6/en/example-auto-increment.html - 雖然我相信這隻適用於MySQL的MyISAM和BDB引擎....你不用沒有指定你正在使用哪個數據庫,所以我在猜測MySQL –
我也看到了這種方法,但我更喜歡不使用只針對MyISAM的方法 – user3504209