名前¶ DBIx::Class::Manual::Cookbook - レシピいろいろ レシピ¶ 検索¶ ページ処理された結果セット¶ When you expect a large number of results, you can ask DBIx::Class for a paged resultset, which will fetch only a small number of records at a time: 結果セットが膨大になりそうなら、ページ処理された結果をDBIx::Classで取得できます。 一回に、少しのレコードしかとってきません: my $rs = $schema->resultset('Artist')->search( undef, { page => 1, # page to return (defaults to 1) rows => 10, #
2009年06月17日00:13 Perl DBICのリレーションが苦手で使うたびに調べなおすのが面倒なのでまとめてみた 「DBICのリレーションとか、毎回使うたびに調べてて時間が勿体無い」と思ってまとめてみました。簡単な例として、entryテーブルとcommentテーブルを考えてみましょう。 mysql> desc entry; +---------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment |
国内では微妙な立ち位置に ずいぶん間が空いてしまいましたが、今回はデータベース話の3回目として、DBICことDBIx::Classについてまとめてみます。DBICは、海外ではMooseやCatalystと並ぶモダンPerl界の三種の神器のひとつとしていまも広く宣伝されていますが、国内では、当初こそClass::DBIからの乗り換えを強力に推進する流れが見られたものの、最近ではあまり名前を聞くこともなくなり、むしろDBICからの脱却が潮流になっているかの印象を受けることさえあります。いったい何がどうなっているのか、例によって歴史を追いかけながら見ていきましょう。 もともとはオブジェクトを永続化するためのもの DBICの立ち位置を理解するには、まずはその先駆けとなったClass::DBIがどういうものであったかを理解しておく必要があります。 連載第36回でも紹介したように、マイケル・シュワーン
2009年05月17日00:14 Perl CatalystのChainedアクションの連鎖を止める方法 最近Chainedアクションを使っていて困ったことがありました。それは、、、 レインボーブリッジが封鎖d Chainedアクションの連鎖が止められませんっっ(ノ`□´)ノ〜┻━┻ どういうことかというと、ログインしているかどうかのログインチェックをChainedアクションを使って実装していて、未ログイン状態だったらログインページにリダイレクトさせたかったんです。 sub auto : Private { my ($self, $c) = @_; $c->res->redirect( 'http://www.zozom.net' ); $c->log->debug("in auto"); } sub hoge : Local { my ($self, $c) = @_; $c->log-
ハマったメモ。 さてまた今回も若干適当な記事だけども、メモということでお許し願いたい。 ってか誰も言及してないっぽいんだけどもしかしてこの現象うちだけ? とにかくタイトルの通りで、検証時の各モジュールのVERSIONは以下の通り。 DBD::mysql-v4.005 DBIx::Class-v0.08100 前回のDBD::mysqlでSegmentation faultの件は無事解決したものの、今度はDB再接続時に文字化け発動でゲンナリしてました。 でログとか見てるとどうもDBICのon_connect_doで指定しているSET NAMES UTF8がDB再接続時に動いてないことが判明。 myapp_server.plだとちゃんとSET NAMES呼ばれるんだけどmod_perlだと何故か呼ばれない。 ってことでmod_perlに関係有りそうな部分をひたすら調べていたところ、mysql_
2009年06月09日23:48 MySQL Perl MySQLで "SQL_AUTO_IS_NULL = 0" じゃないと、IS NULLで検索されたときにエライ目に遭うという話 先日、Catalystアプリを作っていたとき、データの新規作成と編集を同じメソッドで処理していて、このようなコードを書きました。 my $rs = $c->model('DBIC::Hoge'); $rs->update_or_create( { id => $id, # primary key name => $name, }, {}, ); hogeテーブルはこんな感じ。 +-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----
Configuring Catalyst for use behind a front-end proxy A typical catalyst setup might have the server running on a cluster of machines, which are proxied by a light-weight frontend server such as Apache or nginx. This means that the catalyst app needs to know the publically-viewable URI base it's going to be accessed from, so that c.uri_for constructs and similar refer to the correct absolute path
PerlSetEnv ×208 : .co.jpのGoogle検索 ×38, .co.jpのGoogle検索 ×14, .co.jpのGoogle検索 ×12, .co.jpのGoogle検索 ×7, .co.jpのGoogle検索 ×6, .comのGoogle検索 ×4, .co.jpのGoogle検索 ×4, .comのGoogle検索 ×3, .comのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .co.jpのGoogle検索 ×3, .comのGoogle検索 ×2, .comのGoogle検索 ×2, .comのGoogle検索 ×2, .co.jpのGoogle検索 ×2, .co.jpのGoog
[Perl] Wide character in print atというエラーはUTF-8フラグが付いた文字列をprintしようとしているからである。なのでUTF-8フラグを取り外してからprintすればエラーがでなくなります。UTF-8フラグが付いているかどうかはutf8::is_utf8を使用すればよい。 #UTF8フラグが付いているかの確認 utf8::is_utf8では実際の文字列がUTF-8かどうかではなく、あくまでフラグがついているかどうかを確認します。そのため、UTF-8の文字列もフラグが付いていなければ上記の出力はno flagとなります。またutf8::is_utf8はuseしなくても使用できる。useすると全然違う意味あいになるので注意。 UTF-8フラグが付いていたら、encodeを使用してフラグをはずします。以下の例では$stringをutf-8に変換して出力します
PerlのMVCフレームワークであるCatalystをインストールしていろいろいじってみている。 インストールの方法とかぐちゃぐちゃ書いていたら、もはやBlogのボリュームではなくなってしまったので止めた。とりあえずインストール方法は日々変化しているので、上掲のCPANのドキュメントに従うのが良いと思う。1ヶ月でもう変わってるし。 CatalystはフレームワークといいつつもController部分だけなので、ViewとModelは自分で選べるところが良い。ViewはTT(HelperでTT TTSiteがいい感じ)、ModelはDBIx::Class+MySQLを選んだ(DBIx::Class::Schema::Loaderはテーブルやテーブル同士のリレーション(制約)から勝手にSchemaを生成してくれて非常に便利)。 DBIx::Classから返ってくる文字列がいきなり文字化け
DBはUTF8だけど、携帯サイトなどでShift_JISも使いたい。 DBICをShift_JISで上手く使うには Template::Plugin::Jcodeを使う。 TTビューはアクセサの最後に.jcode.sjisを付ける。フォームからの入力は、手動変換。 Data::FormValidatorのfiltersでUnicode::Japaneseのcode refを指定して一括変換してしまうのがよいかも。 Catalyst::Plugin::Unicode::Encodingで入出力の内外を自動変換。 DBIx::Class::InflateColumnを使って自動変換。変換するカラムを指定する必要があるため、少し面倒。 (DBIx::Class::UTF8Columnsも同じ手間) 2が簡単そうだけど、UTF8とShift_JIS用にスキーマを二重に作るのも面倒だし、携帯のキャリ
泣きながらPerl/Catalystを書いている今日この頃です。慣れない言語は辛い。 PerlのORマッパーであるDBIx::Classを使ってるんですが、とりあえずDBIx::Class beginnersを見ると、使い方の指針やFat Modelっぽい書き方が載っていて大変良いです。ActiveRecord大好きです。 で、CatalystにはRailsのnamed_scopeのような便利な記法は標準では提供されていません。多分。でもDBIx::Class::ResultSetのサブクラスを使うようにすれば、それっぽいことはできるようになります。 まず アプリ名をMyAppとします。 my $rs = $c->("DBIC::Foo")が返すのはDBIx::Class::ResultSetのインスタンスで、これはクエリを投げて返ってきた集合に対して処理をするために用います。 一方、例え
2008年09月16日00:01 Perl Catalystのソースコードを勉強 そろそろCatalystのコードくらい読んでおかないと、と思ってこの記事を参考にCatalyst.pmを読んでみました。そのまとめです。 ちなみに、ところどころ出てくる $class は MyApp のことです。では (((((((((((っ・ω・)っ れっつごー ① 起動時に一度だけ実行される処理フロー Catalyst->import; sub import { my ( $class, @arguments ) = @_; return unless $class eq 'Catalyst'; my $caller = caller(0); unless ( $caller->isa('Catalyst') ) { no strict 'refs'; # @MyApp::ISAに、CatalystとCa
[Catalyst] [DBIx::Class] 一時的には 環境変数をenvセットでテストサーバ駆動 $ env DBIC_TRACE=1 ./script/myapp_server.pl -r いつも出す時は MyApp.pm に $ENV{'DBIC_TRACE'} = 1; と書き込んでおく。 Apache等の本番環境に移した後は気になるところだけ $c->model('DBIC')->storage->debug(1); $c->model('DBIC')->storage->debugfh(IO::File->new('/log/DBIC.log', 'w')); 通常のDBIC(non Catalyst)では my $schema = DB::Hoge->connect('dbi:mysql:dbname;localhost','I
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く