システムちーむCakePHPCakePHPのアソシエーションについて触れる機会がありましたので、簡単ですがまとめてみます。findしてみるはじめにアソシエーションとはモデル同士のつながりのことです。アソシエーションには4つの種類があります。hasOnehasManybelongsTohasAndBelongsToManyhasOneモデルが別のモデルのデータを1件だけ所有するという関係です。相手が外部キーをひとつだけもっています。ユーザとプロフィールのテーブルを作成してみます。varchar(256),);profilesテーブルの外部キーにuser_idが設定されています。外部キーはほかのテーブルと関連付けるためフィールドです。モデルという2つのモデルがそれぞれのテーブルに連携されます。1人のユーザはひとつのプロフィールを持つので、この2つのモデルの関係は1対1の関係になります。この2つのモデルの関係をコードで書くと次のようになります。モデルの情報も同時に取得することができます。このようにアソシエーションを利用すると、関連したモデルの情報も同時に取得することができます。hasMany相手のモデルに自分のIDが複数あるかもというもので、一対多の関係と呼ばれます。ブログのサービスを例に考えます。ユーザには複数の記事がひもづきますが、特定の記事は複数のユーザにひもづくことはなく1つの記事にひもづきます。これが、1対多の関係です。belongsToモデルが別のモデルのデータに所属しているという関係です。先程のhasOneの項目でもあったプロフィールや、ブログの記事に対するコメントなど、データが所有者のIDを保持しているようなデータ構造です。array('User');}プロフィールをfindすると、ユーザモデルの情報も取得します。先程は、hasManyの項目で考えたブログの記事とコメントの一対多の関係でした。記事とタグ(Tag)の関係を考えます。記事には複数のタグがつきます。ここまでは、記事とコメントの関係と同じですが、記事Aに追加されたタグが、別の記事Bに追加されることもあるので、コメントとは違い、あるタグは複数の記事にひもづく可能性があります。このような関係を多対多の関係と呼び、CakePHPではモデルで表現するために、hasAndBelongsToManyを使うことができます。中間テーブルこのデータ構造を使うには2つのテーブルを中継する、中間テーブルを作成します。テーブル名を2つのモデル名をアンダースコアでつないだ形にします。(post_tags)中間テーブルにはそれぞれのテーブルのidに該当する項目を外部キーとして用意しておきます。))このような感じに、タイトルAの記事につけられたタグのデータも取得しています。中間テーブル(PostTag)のデータも出力されていますね。))タグ1とタグ1がつけられた記事を取得しています。見る2016.07.14CakePHPのfindで複雑な条件2016.05.17CakePHPのアソシエーションについて2015.10.05PHPの「0」とか「空」とかまーしーシステムちーむ2015年に入社しました。Webエンジニアとして日々勉強中です。スマホサイト制作にかかせないbackground-sizeについて5簡単作成!オリジナルのイラストなどのデザインQRコードを作ってみた。その32016.11.14旧東海道をいくら歩いてもGo-Nextには着きません。2019.07.26現在リニューアル中。多忙につきお待たせしております。