Schemaの設定について1 #03
こんにちわ!nekokakです!
三日目はDBIx::Skinnyで使うschemaクラスの細かい設定方法などについてです。
二日目で作ったProj::DB::Schemaを振り返ってみましょう。
package Proj::DB::Schema; use DBIx::Skinny::Schema; install_table user => schema { pk 'id'; columns qw/id name birth_on/; }; 1;
まず、DBIx::Skinny::Schemaをuseしています。
DBIx::Skinny::Schemaをuseすることで、schemaの定義を行うための各種関数が
Proj::DB::Schemaにexportされます。
また、use strict/use warningsされた状態と同じ状態になるので、
特別Proj::DB::Schemaでuse strict/use warningsを各必要はありません。
exportされたinstall_tableを使ってtableの定義を行います。
この例の場合は、userというテーブルのスキーマを定義しています。
pkというキーワードを使ってこのuserテーブルのプライマリキーを指定します。
DBIx::Skinnyは1つだけプライマリキーを必ず設定する必要があります。
columnsというキーワードでuserテーブルに存在するカラム名を指定します。
この例の場合、id/name/birth_onというカラムが存在する事を示しています。
次にinstall_utf8_columnsについて説明します。
例えばnameカラムにマルチバイトな文字列が含まれる場合、
プログラム側ではutf8flagがonな状態で扱いたい事でしょう。
その場合にinstall_utf8_columnsを使って定義します。
package Proj::DB::Schema; use DBIx::Skinny::Schema; install_table user => schema { pk 'id'; columns qw/id name birth_on/; }; install_utf8_columns qw/name/; 1;
install_utf8_columnsはテーブル毎カラム毎に定義するのではなく、
定義したスキーマ全てに対して有効に動作します。
ですので、
userテーブル以外にfooというテーブルが存在し、fooテーブルにnameカラムが存在する場合は
この一度の設定でfoo.nameに対してもutf8flagをon/offする処理が行われます。
このinstall_utf8_columnsは最新のDBD::*を使っていれば特に必要が無いようです。
例えばMySQLの場合はmysql_enable_utf8というオプションを有効にしてコネクションするだけです。
これはid:typesterさんに教えていただきました。
ありがとうございます。
ただ、常に最新のDBD::*を使えるとも限らないので、install_utf8_columnsは
DBIx::Skinnyで使える機能として残してあります。
明日は引き続きschemaの細かい設定についてです
have a nice skinny days!:)