質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

19635閲覧

cakephp3 3つ以上のテーブルの連結

Shinroh

総合スコア61

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/03/21 14:12

編集2016/03/21 14:14

外部キーを貼ったテーブルを作成してからbakeで生成したので、いくつかのアソシエーションの設定は追加されたのですが、複数のテーブルをつなげる場合のcontrollerクラスの書き方とtableクラスの設定方法がよくわかりません。

以下の場合にはどのような書き方をするのでしょうか。

controllerの書き方は以下のような書式であってますか?
不足しているものはないでしょうか…。

UserController.php

php

1$users = $users->get($id, ['contain' => ['Companies', 'contain' => ["Sites"]]]); 2

UserTable.php

php

1$this->belongsTo('Companies', [ 2 'foreignKey' => 'companies_id', 3 'joinType' => 'INNER' 4]);

CompaniesTable.php

php

1$this->belongsTo('Sites', [ 2 'foreignKey' => 'sites_id', 3 'joinType' => 'INNER' 4]); 5

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

['contain' => ['Companies' => ["Sites"]]] で取得できそうです。
また、より単純な例としては、['contain' => ['Companies.Sites']] でも行けるようです。条件の指定がない場合ですね。
複数テーブルは以下のようにつなぎます。

php

1// ネストして 2[ 3 'contain' => [ 4 'Companies' => [ 5 'Sites', 6 'OtherTableA', 7 'OtherTableB' => [ 8 'MoreOtherTableC' 9 ], 10 ] 11 ] 12] 13// または平坦に (* の行はなくても動くが個人的に書くのが好き) 14[ 15 'contain' => [ 16 'Companies', // * 17 'Companies.Sites', 18 'Companies.OtherTableA', 19 'Companies.OtherTableB', // * 20 'Companies.OtherTableB.MoreOtherTableC', 21 ] 22]

ポイントは、CakePHP が賢く配列のキーが数値の場合は値をテーブル名として、キーが文字列の場合はキーをテーブル名として扱っている点でしょうか。
配列構造を頭で理解しようとすると複雑ですが、配列リテラルの見た目は上記のように単純にわかりやすくなるので見た目を信じてください。

CakePHP2 での話ですが、以下のサンプルも参考になりそうです。

メインのモデルで contain キーは一度しか使わないことに留意してください。 関連したモデルで再度「contain」を使う必要はありません。

引用: http://book.cakephp.org/2.0/ja/core-libraries/behaviors/containable.html#id2

※ ちなみにせっかく Bake を使うなら、外部キーも 単数形_id にするとそのアソシエーションも拾ってくれますよ。

投稿2016/03/23 13:30

tozjp

総合スコア790

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Shinroh

2016/03/29 05:03

外部キーは単数形_idなのですね。複数形_idの形式で統一しておりました…。 ひとまず、Containの書き方がわかりましたのでありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問