テーブルのリレーション

2007/04/16 | cakePHP

久しぶりにcakePHPに戻る。近頃は一からシステムを組むなんてことに対して完全に億劫になっている。CMSツールとしてブログを使えば大抵のことができるから。記事管理ツールをわざわざ作らなくても、カスタマイズだけでできちゃうからね。
しかし、それでもだめな場合がやはりある。そういう場合でも極力楽をしたいから、そんなときにはcakePHPというわけだ。
しかし如何せん、まだ慣れてない。現状は簡単な仕組みを組むのもマニュアル片手にやっている状況だ(それでもすこぶる使い勝手がいい)。業務ではmojaviとcakePHPのフレームワーク二本立てだけれど、徐々にcakePHPに移行中、というわけだ。
さて本題。cakePHPでテーブルのリレーションを定義する方法。cakePHPでは極力定められたルールに則ってスクリプトを書くことで、定義ファイルも書かなくていいし、SQLも書かなくていい。直にSQLを書く必要がないから、その代わりにテーブルのリレーションをスクリプト側で定義したやらなければならない(ちょっとだけ面倒)。定義の仕方は4種類。ちなみにリレーションの定義の前に、関係するテーブルのモデルは別途個別に作成しておく必要がある。

■hasOneとbelongsTo
基本的に「主」と「従」のテーブル中のレコードが一対一で結ばれる場合、「主」から見て「従」へのリレーションを作成する場合にhasOne、「従」から見て「主」へのリレーションを作成する場合にbelongsToと使う(厳密には違うような気がするけど大体これでいいと思う)。例えばユーザIDのテーブルと、そのユーザのプロパティを格納したテーブルであれば、ユーザIDのテーブルを「主」、プロパティのテーブルを「従」とみなすことができる。

■hasMany
こちらは「親」と「子」と表現するほうがよさそう。「親」テーブルのレコード1つに対して「子」テーブルの複数のレコードが該当するような感じ。1対多の関係になっているタイプ。

■hasAndBelongsToMany
これはちょっと複雑。例えば「人間」と「検索エンジン」というテーブルの組み合わせを考える。Aという人間はgoogleとyahooを使う。Bという人間はyahooとaskを使う。こういう具合に多対多のリレーションを考えるとき、間にもう一つテーブルを入れればわかりやすい。つまり関係を表すデータのみをもつテーブルだ。hasAndBelongsToManyはこういうテーブルをあらわすことに使う。

ここの使い方はまた別途メモする(かもしれない)。

AmazonWebServiceのSearchIndex現在の一覧

AmazonWebService(AWS)では商品の検索をかける際に、商品分野としてSearchIndexというものを指定する。この項目は20弱程度しかないのだが、Amazon側で分野が追加されると、当然のごとくこちらも追加される。よって書籍やウェブ上の情報が古い場合は、最新のSearchIndexが記載されていないことも多々ある。普段参考にしている「超極めるPHP」という書籍も例外ではない(右下参照)。

ちなみに2007年4月15日現在は以下のものが有効の模様(■が比較的最近追加のもの)。
□Blended:(Amazon全体)
□Books:(本)
□Classical:(クラシック音楽)
□DVD:(DVD)
□Electronics:(電化製品)
□ForeignBooks:(洋書)
■HealthPersonalCare:(ヘルス&ビューティー)
□Hobbies:(ホビー)
□Kitchen:(ホーム&キッチン)
□Music:(音楽)
□MusicTracks:(音楽:曲名から)
□Software:(ソフトウェア)
□SportingGoods:(スポーツ用品)
□Toys:(おもちゃ&ホビー)
□VHS:(ビデオ)
□Video:(DVD&ビデオ)
□VideoGames:(ゲーム)
■Watches:(時計)

URLの正規表現

2007/04/14 | PHPで正規表現

URLを正規表現で記述する方法のメモ(どこかのウェブで以前見つけたものだけど、出典がどこかわからない)。でも、たしか、これだと不十分。しっかり、みっちりRFCにのっとって書くと、この10倍くらいの量になったはず。

$pattern='(https?|ftp)(:¥/¥/[-_.!~*¥'()a-zA-Z0-9;¥/?:¥@&=+¥$,%#]+)';

上記正規表現の出展元にお気づきの方、いらっしゃいましたらご一報ください。
リンク張らせていただきたいので。

YouTube API(その2)

2007/04/12 | XML

YouTube APIの使用法は思ったより簡単だった。
APIの利用方法はRESTでもXML-RPCでもどちらでも可能だが、返ってくる結果はどちらも同じなので、今回はお手軽なRESTを使った。
必要なクエリをつなげて以下の要領でXMLを取得すればいい。

$xml=file_get_contents(‘http://www.youtube.com/……’);

XMLそのままでは扱いにくいので、これを配列に格納してしまえばあとは如何様にでも料理できる。やり方は以前に書いた以下の記事参照。

http://php.tekmemo.com/?eid=288722

PHP5ではXML系関数が充実しているが、PHP4が多い現在は上記のページの手法で配列に格納してから使うのが簡単と思う。ゆくゆくはPHP5の記述を理解していかねば・・・

YouTube動画を自動再生

2007/04/11 | その他

PHPには何の関係もない話題。
YouTubeでは自分のブログなどに簡単に動画を貼り付けられるようになっているが、普通に貼り付けただけだと、わざわざ埋め込みFlashをクリックしてやらないと動いてくれない。これを自動スタートにする技。

embedタグにあるsrcパラメータの値の最後に「&autoplay=1」を足す。

これだけで自動再生してくれる。ループ再生したい場合は同様に以下のテキストを足せばいい。

「&loop=1」

いろいろ使えそう。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net