星期六, 7月 14, 2007

在 DBIx::Class 內的兩項功能

兩個功能,第一個是比較複雜的 SQL query,第二個是自訂函數。

第一個功能是透過 scalar reference 做的,像是想要下:
UPDATE mytable SET viewnum = viewnum + 1 WHERE id = 123;

這樣的指令,那麼就用:
my $element = $c->model('MyDB')->find(123);
$element->update({viewnum => \'viewnum + 1'})

這個問題還蠻常在 的 mailing list 上被問,原因在於這是 的範疇,所以沒仔細看完文件不太會知道這個用法。

第二個功能其實還蠻重要的,因為有些 complex operation 沒辦法放到 Trigger 時得在 Database Library 這層做,其實是個蠻常見的情況,但我找了不少說明文件都沒有提到解法。後來發現其實在 就有提供了,不過因為這個功能還是 EXPERIMENTAL,所以大多數的文件都沒有講。

我建議用自訂函數後要把 的 mailing list 訂起來看,之後的版本可能是以其他方式解決這個問題。