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

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

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

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

Q&A

1回答

1644閲覧

belongsToManyの書き方が分からない。

watanabesan

総合スコア10

CakePHP

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

0グッド

0クリップ

投稿2019/04/06 05:59

前提・実現したいこと

cakephp3.7でアソシエーションがうまくできない。
会員テーブルと趣味テーブルの紐づけとして会員趣味テーブルから条件検索をしたいが意外と書き方がgoogle先生にのっていないのでご教授お願いいたします。
DB
Users(会員テーブル)
id

Hobbies(趣味テーブル)
id
name

UsersHobbies(会員趣味テーブル)
id
users_id
hobbies_id

SQLで書くとこんな感じです。
select * from users where id in (select users_id from users_hobbies where hobbies_id in(?,?,?));
条件さえ満たしていればHobbiesもUsersHobbiesのデータは不必要です。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

UsersTable.php $this->hasMany('UsersHobbies', [ 'foreignKey' => 'hobbies_id', ]); UsersController.php $query = $this->Users->find()->contain([ 'UsersHobbies' => function ($q) { return $q->where([ 'UsersHobbies.hobbies_id = 2', ]); } ]); foreach ($querys as $query) { pr($query); }

試したこと

これだとSQLログの結果は
select * from users;
select * from users_hobbies where (hobbies_id in (会員の全ID) and hobbies_id = 2);

補足情報(FW/ツールのバージョンなど)

centos6 php7 mysql5 cakephp3.7

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

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

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

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

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

guest

回答1

0

UsersをHobbiesと連結させたいのであれば以下のような記述になるかなと思います。
UsersTable.php

php

1$this->belongsToMany('Hobbies', [ 2 'foreignKey' => 'users_id', 3 'targetForeignKey' => 'hobbies_id', 4 'joinTable' => 'users_hobbies' 5]);

foreignKeyに連結元のID名のtargetForeignKeyに連結先のID名をそれぞれ書いてあげればよいでしょう。
すでにデータベース上にテーブルができているのであれば、bakeコマンドで吐かせた方が簡単です。
というか、手書きで書いてことはほとんどないですね…。

Usersモデルのファイルを作りたいのであれば、以下のようにすればよいでしょう。

shell

1#bin/cake bake model Users

bakeの使い方
https://book.cakephp.org/3.0/ja/bake/usage.html

投稿2019/04/09 12:59

CodeLab

総合スコア1939

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問