「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Movable TypeのORMがleft joinに対応
以前に、Movable Type 5.1への要望の1つとして、「ORMでleft joinをできるようにしてほしい」というようなことを書きました。
どうやら、Movable Type 5.1でこの要望がかなうようです。
これまでのMovable TypeのORMは、left joinに対応していませんでした。
そのため、「カテゴリに属さないブログ記事」や、「どのオブジェクトとも結びついていないアイテム」を読み込むには、まわりくどいコードを書くことが必要でした。
先日、何気なくMovable Typeのtracのtimelineを眺めていると、11月30日のChangeset 6464として、「Use left join for search uncategorized entries. bugzid:105174.」を見つけました。
「・・・left join・・・だと?」と思ってさらに見てみると、11月2日のChangeset 6275で、「Implemented to support type-ed join」という修正が行われていました。
早速、left joinを試してみました。
例えば、IDが2番のブログから、カテゴリに属さないブログ記事を読み込むには、以下のように書きます。
my @entries = MT->model('entry')->load( { blog_id => 2 }, { join => MT->model('placement')->join_on( undef, { id => \'is null', }, { type => 'left', condition => { entry_id => \'= entry_id', }, }, ), } );
また、IDが2番のブログで、どのオブジェクトとも結びついていないアイテムは、以下のコードで読み込むことができました。
my @assets = MT->model('asset')->load( { blog_id => 2, class => '*' }, { join => MT->model('objectasset')->join_on( undef, { id => \'is null', }, { type => 'left', condition => { asset_id => \'= asset_id', }, }, ), } );
これまでにMTQなどで、「ブログ記事に結びついていないアイテムをフィルタリングして、削除する機能が欲しい」という要望が上がっていました。
left joinが実装されたことで、この要望も実現できるはずです。
ちなみに、Changeset 6464の修正は、ブログ記事一覧の画面で、カテゴリに属さないブログ記事をフィルタリングする機能に関するものです。
拙作のプラグインでも、left joinができないために困ったことが過去にありました。
例えば、SuperSortプラグインでは、カテゴリに属さないブログ記事(およびフォルダに属さないウェブページ)を読み込むために、SQLを直接に書いて実行しています。
Movable Type 5.1対応版のSuperSortプラグインでは、この処理を変えて、ORMのleft joinを使おうと思います。