逆転の発想(データの取り出し方)
2007/04/18 | cakePHP
「hasAndBelongsToMany」。諸問題はあったがなんとか動くことが確認できた。しかし必要なデータを取り出す手法がわからなかった。
ブログの記事とタグの関係を例に出すとする。記事はたくさんあるし、タグもたくさんあり、両者の関係は「多」対「多」で表すことができる。モデルとしては「article(記事)」と「tag(タグ)」の二つを作るとする。
この条件で、特定のタグを持つ記事を抽出しようと試みた。記事を抽出したいのだから、articleモデル内でhasAndBelongsToManyの設定を記述し、articleコントローラでデータを取り出そうと試みた。しかしどのように記述しても記事は全部抽出されてしまう。それぞれの記事には関連するタグが割り付けられているので、特定のタグのあるなしで、どの記事が必要なのか、ということはわかるが、記事が全て抽出されてしまっているため、なんとも不細工な処理だ。
酒を飲みつつ、ふと思いついた。逆の発想、タグからたどればいいじゃない!。タグと記事は多対多で同等の関係にあるわけだから、逆から見ても同様にデータを取得できる。つまり特定のタグに紐付けられた記事を全て抽出できるわけだ。あとはfindメソッドで、特定のタグのみ抽出すれば、これで全て事足りる。目からうろこの処理だった。
お酒もたまにはいいことあるね。