みなさんこんにちは!!
以前CakePHPとWordPressでアプリを組んだのでリレーションとか色々書いていこうと思います。
WordPressではデータを入力、保存するのみで、主なデータ表示はCakePHPで行いました。
それでは以下が目次です。
WordPressのデータをCakePHPで取得するために設定する
CakePHPとWordPressはインストール済み、また記事は何個か入っている、タグも何個か設定してある前提でやっていきます。
今回やるのは「記事からその記事に結びついているタグを表示する」ことと「タグからそのタグが結びついている記事を表示する」ことです。
自分でもちょっとおかしいと思うところは結構ありますw
WordPressのデータベースの構造は以下を見ればわかります。
http://wpdocs.sourceforge.jp/データベース構造
CakePHPではきつそうな部分が混ざってますがそこはスルーしましょう。
ここでやりたいことは記事に対するタグを引っ張ってくることです。
それではやっていきましょう。
いじっていくテーブルは、wp_posts、wp_term_relationships、wp_term_taxonomy、wp_termsの4つです。
なのでそれに対応するModelを作っていきます。
wp_postsはwp_term_relationshipsを持っているので以下のように書きます。
Posts.php
[ 'className' => 'TermRelationship', 'foreignKey' => 'object_id' ] ); }
wp_term_relationshipsはこんな感じです。ちょっとつっこみたいのはよくわかる。。。
TermRelationship.php
[ 'className' => 'WpTermTaxonomy', 'foreignKey' => 'term_taxonomy_id', ] ]; }
wp_term_taxonomy
TermTaxonomy.php
[ 'className' => 'WpTerm', 'foreignKey' => 'term_id' ] ]; }
そして最後。wp_terms
Term.php
[ 'className' => 'TermTaxonomy', 'foreignKey' => 'term_taxonomy_id' ] ]; }
これで設定完了です!お疲れ様です!
動作確認・実際に表示してみる
それでは最後に動作確認をしてみましょう。
たくさんのRelationを使うときはContainableBehaviorが便利なのでAppModelで読み込んでおきましょう。
AppModel.php
動作確認です。まずは記事からタグを引っ張りだす!
PostsController.php
find('all', ['contain' => [ 'TermRelationship' => [ 'TermTaxonomy' => [ 'Term' ] ] ] ); debug($articles); } }階層の深い部分にありますがタグが一覧表示されていると思います!
ここまでわかれば簡単!タグから記事を表示しましょう。
PostsController.phpfind('all', ['contain' => [ 'TermTaxonomy' => [ 'TermRelationship' => [ 'Post' ] ] ); debug($tags); } }最後に
いかがでしたでしょうか。
少し無理やりでしたが、目標は達成出来たかと思います。
CakePHPのリレーションは「_id」がついているものを勝手につなげますが、それを利用したものと言えます。
もっと綺麗に実装出来そうですが、実際に実装していく場合は、findの条件の部分を覆い隠せば綺麗になると思います。覆い隠す場合は以下の記事が参考になるかもしれません。
findせずにconditionsを返す、DRYなCakePHPのModel実装のススメ
CakePHPerなら持っておかねば!
Webアプリ開発を加速する CakePHP2定番レシピ119posted with amazlet at 14.01.03長谷川 智希
秀和システム
売り上げランキング: 34,461更新情報はFacebookページで!
ブログの更新、読んで役立つ他ブログの記事などを更新しています。