2

次のコードを使用して、Catalyst 内から DBIx::Class を使用して新しい行を作成しようとしています。

$c->model('Session')->resultset('UserPreference')->create(
                {
                 appname => 'rss_reader',
                 username => $username,
                 data => $data,
                },
               );

しかし、私は毎回このエラーに遭遇しました:

Caught exception in App::Controller::rss->dbo "Can't call method "resolve" on an undefined value at /etg/source/Linux/pkg/perl-5.8.8/lib/site_perl/5.8.8/DBIx/Class/Row.pm line 1309."

何らかの理由 (perms、制約など) でクエリが失敗したときに、このエラーが誤ったブランケット エラーとしてスローされることについて話しているいくつかのメーリング リストを見かけますが、問題なく見え、DBIC_TRACE=1 で実行していても、私はしません。生成されたクエリがコンソールに表示されることさえあります。

許可などに何か問題があるとは思わないことに言及する必要があります。データベースハンドルを手動で使用すると機能するため:

my $stm=$c->model("Session")->storage->dbh->prepare("insert into user_preferences (username,appname,data) values ('mphillip','rss_reader','cookies')"); $stm->execute(); 
4

1 に答える 1

1

update_or_create代わりに試しましたcreateか?行が存在createする場合は失敗します。

于 2011-08-08T03:17:33.063 に答える