MT::Objectで'like'を使った検索や絞り込みを行う。

| コメント(0) | トラックバック(0)

MT4.2(多分4.1でも出来ると思う)のMT::Objectではlike,not_like,<=なんかを使ってオブジェクトを検索したり絞り込んだりできます。ドキュメントにも書いてある(4.1では書いてない)。

MTOS-4.22-ja/lib/MT/Object.pm

This selects all I<MT::Foo> objects where foo == 'bar'. But you can provide
a hashref value to provide more options:

    my @foo = MT::Foo->load( { foo => { like => 'bar%' } });

This selects all I<MT::Foo> objects where foo starts with 'bar'. Other
possibilities include 'not_like', 'not_null', 'not', 'between', '>',
'>=', '<', '<=', '!='. Note that 'not' and 'between' both accept an
arrayref for their value; 'between' expects a two element array, and
'not' will accept an array of 1 or more values which translates to
a 'NOT IN (...)' SQL clause.

I<¥%arguments> should be a reference to a hash containing parameters for the
search. The following parameters are allowed:

例えば、本文に「Movable Type」を含むエントリーを検索するのであれば以下のように書けます。


my @entries = MT::Entry->load( { text => { like => '%Movable Type%' } });

例としてMTEntriesでtarget(カラム名), operator(条件), query(クエリ)を指定して絞り込めるようにしてみました。あくまでもサンプル。


<mt:entries target="text" operator="like" query="%Movable Type%">

MTOS-4.22-ja/lib/MT/Template/ContextHandlers.pm


8139a8140,8146
>         my $target = $args->{target};
>         my $operator = $args->{operator};
>         my $query = $args->{query};
>         if (($target) && ($operator =~ /^not_like|like|not|not_null|not|>|>=|<|<=|!=$/i)) {
>             $terms{$target} = { $operator => $query };
>         }
>

一応? プラグインにしたものも置いておきます。

追記:インデックス・アーカイブでしか有効になりません。

'between' ではarrayrefが渡せるようなことが書いてるのですが、以下のようなコードではうまく取得できなかった...のでもうちょっと調べてみることにします。


my @query = [1,10];
my @entries = MT::Entry->load( { id => { between => \@query } });

いずれにしても色々な絞り込みがやりやすくなりますね。

[関連記事]→ MT::ObjectこそがMTの本質であると勝手に思っている。

トラックバック(0)

トラックバックURL: http://junnama.alfasado.net/cgi/mt/mt-tb.cgi/59

コメントする

Facebook

Twitter

このブログ記事について

このページは、Junnama Nodaが2008年10月26日 07:56に書いたブログ記事です。

ひとつ前のブログ記事は「国立国会図書館開館60周年記念貴重書展 学ぶ・集う・楽しむ」です。

次のブログ記事は「(MT)切り捨て、切り上げ、四捨五入とか。」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 6.2.6