一意制約名の指定に挫折しました。
CatalystのSELECT系の処理で例えばfind_or_newの場合、プライマリキー以外の一意制約の場合、第二引数に一意制約名を指定してあげないと検索してくれない。例えばユニークキーの時、shushokuがプライマリキー、mainがユニークの時
my $rs = $self->{Schema}->resultset('Yushoku')->find_or_new({ shushoku => 'Gohan', main => 'Niku', fuku => 'Sarad', drink => 'Ocha'});
としたら、shushokuで確認してSELECTしてくれる。
しかし、shushoku(プライマリーキー)を消してユニークキーで確認してほしい時は、第二引数を指定しなければならない。
ユニークキー:main_key
my $rs = $self->{Schema}->resultset('Gohan')->find_or_new({ main => 'Niku', fuku => 'Sarad', drink => 'Ocha'},{key => 'main_key'});
しかし、結果は'Unknown unique constraint main_key on \'Yuushoku\''となって指定できないよう。
find('Niku',{ key => 'main_key'})とかでも駄目で、ユニークキーの指定をcatalyst側からできてないよう。
add_unique_constraintを使わないといけないんだけど、面倒くさくなって、
my $rr = $self->{Schema}->resultset('User')->find({main => 'Niku'}); if($rr){return;}else{ my $rs = $self->{Schema}->resultset('Gohan')->find_or_new({ main => 'Niku', fuku => 'Sarad', drink => 'Ocha'}); }
として第二引数を使わないようにした。ただどう考えても冗長だなあ。find_or_newとか使えなくて悔しい。
参考にしたサイト&本
- 作者: 山田祥寛
- 出版社/メーカー: インプレス
- 発売日: 2010/05/20
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 214回
- この商品を含むブログ (18件) を見る
add_unique_constraintでゆこう - Hatena::Diary::Neko::kak 500 Internal Server Error
CatalystでFormValidator::Simple::AutoでDBIC_UNIQUE使う場合 - libnitsuji.so