【Cakephp】アソシエーション

こんにちわ、masumasuです。

春の暖かさが感じられる頃となりました、皆様はいかがお過ごしでしょうか。

今回はアソシエーションについて書いていきます。

アソシエーションとは、モデル同士の関連を言います。

アソシエーションを使うことで、一度の処理で関連する複数のモデルからデータを取得したり、保存したりすることができます。

アソシエーションには4つの種類があります。

hasOne

‘hasOne’は一つのモデルが他のモデルを所有していることを示します。

例えば、ユーザー(Users)が一つのプロフィール(Profiles)を持つ場合などに使用します。

テーブルオブジェクトのinitialize()メソッドには、以下のように定義します。

public function initialize(array $config): void
    {
        // モデル名を入れる
        $this->hasOne(モデル名');
    }

hasMany

‘hasMany’は一つのモデルが複数の他のモデルを所有していることを示します。

例えば、ブログ記事(Posts)が複数のコメント(Comments)を持つ場合などに使用します。

テーブルオブジェクトのinitialize()メソッドには、以下のように定義します。

public function initialize(array $config): void
    {
        // モデル名を入れる
        $this->hasMany('モデル名');
    }

belongTo

‘belongTo’は一つのモデルが他のモデルに属することを示します。

例えば、記事(Posts)がユーザー(Users)に属する場合などに使用します。

テーブルオブジェクトのinitialize()メソッドには、以下のように定義します。

  public function initialize(array $config): void
    {
        // モデル名を入れる
        $this->belongTo('モデル名');
    }

belongToMany

‘belongToMany’は多対多の関係では、一つのモデルが複数の他のモデルと関連付けられ、逆にその他のモデルも同様に複数の元のモデルと関連付けられます。

例えば、ブログの投稿とタグの関係が多対多の場合を考えてみましょう。

一つの投稿は複数のタグを持ち、一つのタグも複数の投稿に関連付けられる可能性があります。

テーブルオブジェクトのinitialize()メソッドには、以下のように定義します。

public function initialize(array $config): void
    {
        // モデル名を入れる
        $this->belongToMany('モデル名');
    }

まとめ

たくさんのテーブルを利用するような場面で、アソシエーションは非常に便利です。

ご覧いただきありがとうございます。