order by句の生成

DBIx::Custom::Orderクラスを利用するとorder by句を簡単に記述することができます。たとえば、デフォルトの順序を最初に指定しておいて、状況に応じて順序をカスタマイズすることが簡単にできます。

DBIx::Custom::Orderオブジェクトを生成するには、orderメソッドを使用します。

my $order = $dbi->order;

DBIx::Custom::Orderオブジェクトが取得できます。

並びを指定するにはprependメソッドを使用します。order by句のパーツが前へ前へと追加されていきます。

$order->prepend('title', 'price desc');
$order->prepend('author desc');

最終的にorder句で利用する文字列に変換するにはto_stringメソッドを利用するか、DBIx::Custom::Orderオブジェクトを文字列として評価します。

my $order_str = $order->to_string;
my $order_str = "$order";

次のようなorder句が生成されます。

order by author desc, title, price desc

では次に同名の列名を含むものをさらにprependして見ましょう。

$order->prepend('price asc');

この場合には、priceが二つ存在しますが、DBIx::Custom::Orderオブジェクトは、重複を適切に処理してくれます。後で追加されたものが優先されます。文字列化すると次のようなorder by句が生成されるのが確認できます。

order by price asc, author desc, title

もし並びの順序が固定されている場合はDBIx::Custom::Orderオブジェクトを使わずに直接記述するのが簡単です。並びの順序を動的に変えたい場合にDBIx::Custom::Orderオブジェクトを利用しましょう。

関連情報