質問編集履歴

2 追記

celeritas

celeritas score 11

2017/03/14 14:32  投稿

[CakePHP3]queryBuilderの使い方:サブクエリにsql関数を使う
###前提
CakePHPでイベント管理システムを作るとして、データベースが次のような構成になっているとします。
events:イベントの情報を格納
customers: イベントごとの参加者情報を格納
events hasMany customersの関係で各イベントに対して複数の参加者が存在しcustomersテーブルにはeventsのidを格納するカラムがあります。
events hasMany customersの関係で各イベントに対して複数の参加者が存在しcustomersテーブルにはeventsのidを格納するカラム「event_id」があります。
###やりたいこと
表題の通りqueryBuilderを使ってクエリを作成する際にhasMany関係にあるテーブルに対してsql関数を実行する方法を教えていただきたいです。
例えば、
eventsテーブルからqueryBuilderを使ってレコードを取り出す際に、eventsの全てのカラムに加えて、レコードに関連しているcustomersテーブルのレコード数をcount関数を使って取り出す場合や、関連しているレコードの特定のカラムをsum関数で合計するような場合です。
eventsテーブルからqueryBuilderを使ってレコードを取り出す際に、eventsの全てのカラムに加えて、レコードに関連しているcustomersテーブルのレコード数をcount関数を使って取り出す場合や、関連しているレコードの特定のカラムをsum関数で合計するような場合です。
端的に言えば次のようなクエリを生成したいということです。
```MySQL
SELECT *,
( select COUNT(*) from `customers` where `customers`.`event_id` = `events`.`id` )
FROM `events`;
```
  • CakePHP

    3129 questions

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

1 文章の修正

celeritas

celeritas score 11

2017/03/14 01:29  投稿

[CakePHP3]queryBuilderの使い方:サブクエリにsql関数を使う
###前提・実現したいこと
###前提
CakePHPでイベント管理システムを作るとして、データベースが次のような構成になっているとします。
(例)PHP(CakePHP)で●●なシステムを作っています。
 ■■な機能を実装中に以下のエラーメッセージが発生しました。
events:イベントの情報を格納
customers: イベントごとの参加者情報を格納
###発生している問題・エラーメッセージ
events hasMany customersの関係で各イベントに対して複数の参加者が存在しcustomersテーブルにはeventsのidを格納するカラムがあります。
```
エラーメッセージ
```
###やりたいこと
表題の通りqueryBuilderを使ってクエリを作成する際にhasMany関係にあるテーブルに対してsql関数を実行する方法を教えていただきたいです。
###該当のソースコード
```ここに言語を入力
ここにご自身が実行したソースコードを書いてください
```
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
例えば、
eventsテーブルからqueryBuilderを使ってレコードを取り出す際に、eventsの全てのカラムに加えて、レコードに関連しているcustomersテーブルのレコード数をcount関数を使って取り出す場合や、関連しているレコードの特定のカラムをsum関数で合計するような場合です。
  • CakePHP

    3129 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る