2012年06月11日

DBIx で複数レコードのinsert

DBIx で bulk insert する方法
で出来ました

for(0..10){
  push @neko , {name => 'neko'.$_ , id=>'hogehoge'};
}
# use bulk insert.
$rs->populate(\@neko);
posted by onishi at 14:46| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

2011年08月29日

Dbixの不具合??find,single,search

■searchメソッドで、sqlが実行されるタイミングが
nextやfirstメソッドを呼び出した時。

出来ればresultsetのタイミングで実行して頂きたい。

■findメソッド
複数条件(where)を指定した場合、
where句に、テーブルのキーが入ってると、それだけしか
whereかけてくれない。

対策
複数条件で1レコードだけ結果セットを得たい場合
かつ複雑なSQLを使いたい場合
$schema->resultset(***)->search(***,***)->slice(0,0)->first;
でfindと同じ結果セットが得られる。

やっぱりDbix使いにくい。

■single
はなぜか上手く使えない
調査いるかな。








posted by onishi at 12:54| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

2011年08月03日

配列でresultsetを取得する

http://d.hatena.ne.jp/Craftworks/20090301/1235890416

my $rs = $schema->resultset('Table')->find($id);
$row = +{ $rs->get_columns };
my @rows = map +{ $_->get_columns }, $rs->all;


http://d.hatena.ne.jp/midori_kasugano/20090630/1246367516
posted by onishi at 19:45| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

SQL書きたい


http://d.hatena.ne.jp/Climber/20081010/1223643969
http://d.hatena.ne.jp/a666666/20091208/1260282931

my $schema = $c->model('Xxxxxx')->schema;
my $dbh = $schema->storage->dbh;
my $sth = $dbh->prepare("UPDATE files SET content=? WHERE id=?");
$sth->execute($file_data, $file->id);
$sth->finish;

こんどやってみよう。
posted by onishi at 17:08| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

DBIxで発行されたSQLを見たい!!

my $fh = IO::File->new('ログファイルのパス', 'w'); 
#wはログを残さないモード 以前発行されたSQLは見れない
#aはログを残すモード 以前発行されたSQLも見れる
$schema->storage->debug(1);
$schema->storage->debugfh($fh);
$fh->autoflush;

おなかすいたー
posted by onishi at 16:17| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

2011年07月06日

リレーションのはりかた(has_many)LEFT JOIN

DBIx::Class::Relationship
http://search.cpan.org/~frew/DBIx-Class-0.08192/lib/DBIx/Class/Relationship.pm
英語読めるようになりそう。


DBIとDBIxは違っていて、おそらく
DBIがSQLがりがり書けて、リレーションはりやすくて
発行のタイミングもつかめて、とか、手動的な感じ。
DBIxは、初期設定、テーブルやそれに関連する他テーブルを記述して
後は自動で好きなように使える感じ、
あまりSQLの事考えなくていい。


Class::DBI vs. DBIx::Class
http://www.perlmonks.org/?node=557402
『Class::DBIもDBIx::Classもとても素晴らしいけれども、パワフルで安定した方を使いたい。
一体どっちを使ったほうがいいの』
っていう主旨の質問。

To me, the DBIx:: modules are more useful as facade interfaces to DBI, and the class::dbi modules are helpful to define relations between tables.
As this topic has been discussed before; a Super Search will also lead to A brief survey of the DBI usability layer modules on the CPAN .
『僕にとっては、the DBIx::modulesのほうが、表面上のインターフェースがDBIより使いやすいよ。
dbi modulesは、テーブル間のリレーションを明確にするのに役立つ。
この議論、以前のトピックであったよ、これ見てみて。
A brief survey of the DBI usability layer modules on the CPAN
http://www.perlmonks.org/?node_id=504724

ちなみに、私はセンター英語で60%実力です。
8割ぐらい当たってるかな。


結論。
ここに書いてあった。
http://rt.air-nifty.com/pods/DBIx/Class/Relationship.html

__PACKAGE__->has_many('自分テーブルのカラム名称' => 'リレーション先のテーブルSchema', 'リレーション先のカラム名');

で出来た。
posted by onishi at 13:16| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

DBixでSQLでjoinしたのをresultsetで取得

これいい。
こういうのがいい。

カスタムの結果ソースを使用した任意のSQL
http://rt.air-nifty.com/pods/DBIx/Class/Manual/Cookbook.html#arbitrary_sql_through_a_custom_resultsource
生SQLに書いて、検索条件バインドする。
複雑な結合等々できないっていうか
SQLってデータ操作に特化した言語だから
SQLで書いたほうがシンプルなんじゃないの?


複数条件を指定するには?

Complex where statements
http://search.cpan.org/~frew/SQL-Abstract-1.72/lib/SQL/Abstract.pm#Complex_where_statements

ここらあたりが怪しい。

Catalyst::Wiki
http://wiki.catalystframework.org/wiki/dbicfaq/arbitrary_sql
posted by onishi at 13:05| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

add_relationshipの引数。casc

__PACKAGE__->has_many(
の第四引数。
$attrsk、はオプションらしいんだけど。


{'cascade_delete' => 0}
を入れると、
リレーション先のテーブル(子テーブル)まで消さない。


オプション一覧ないのかな。

ありました。英語だけど。
http://search.cpan.org/~frew/DBIx-Class-0.08192/lib/DBIx/Class/Relationship/Base.pm#attributes


ブログ見やすくしたい。
posted by onishi at 13:05| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする

2011年07月04日

リレーション時に気をつけること

結合先のフィールドと、結合元のフィールドは同じ型にすること。

当然のことですけど。
posted by onishi at 13:03| Comment(0) | DBix | このブログの読者になる | 更新情報をチェックする