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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

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

Q&A

解決済

CakePHPにおいて、アソシエーションを利用したSQLが上手くできない!!

Shinog
Shinog

総合スコア99

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

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

2回答

0グッド

0クリップ

4914閲覧

投稿2015/08/10 07:24

編集2015/08/10 07:25

はじめまして!

現在、商品と購入履歴をhasmanyでアソシエーションしており、ある商品における商品名・価格・購入数の合計データを取得したい者です。

PHP

1//ItemsController.php 2// 商品(items) hasmany 購入履歴(purchases) 3 4 public function sale() { 5 6 $user = AuthComponent::user('id'); 7 8 $this->set('items', 9$this->Item->find('all', array( 10 'conditions' => array('Item.whom' => $user), 11 'fields' => array( 12 'sum(Purchase.quantity) as sumQuantity' 13 ), 14)) 15); 16 }

PHP

1//...VIew/Items/sale.php 2 <?php foreach ($items as $item): ?> 3 4<?php echo h($item['Item']['title']); ?><br/> 5<?php echo h($item['Item']['price']); ?><br/> 6<?php echo h($item['0']['sumQuantity']); ?><br/> 7 8 9 <?php endforeach; ?>

上記のコードを実装すると、以下のようなエラーが出てしまいます。

このような場合、どう対処すればよいでしょうか?
是非ともご教授のほどよろしくお願い申し上げます。

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Purchase.quantity' in 'field list'

SQL Query: SELECT sum(Purchase.quantity) as sumQuantity FROM データベース名.items AS Item WHERE Item.whom = 8

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

ベストアンサー

hasMany のテーブルを条件文で指定することはできません。
できるのは belongsTo のテーブルのみです。
Items が Purchase を hasMany してるのであれば、
以下の要領でできるでしょう。

php

1foreach ($items as $item) { 2 $sum = 0; 3 foreach ($item['Purchase'] as $p) { 4 $sum += $p['quantity']; 5 } 6 echo h($item['title']), "<br>", h($item['price']), "<br>", $sum; 7}

投稿2015/08/10 07:52

poliphilus

総合スコア149

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

Shinog

2015/08/11 15:55

ご回答ありがとうございます! 上記のコードで無事動きました!!

0

そもそもなのですが、テーブル名称が違うのではないでしょうか?

SQL Query: SELECT sum(Purchase.quantity) as sumQuantity FROM データベース名.items AS Item WHERE Item.whom = 8

上記のSQLをみると、Purchaseテーブルのカラムを参照していますが、FROM句には対象テーブルの宣言がありまあせん。

投稿2015/08/10 07:30

編集2015/08/10 07:33
takayukiinaba

総合スコア1158

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.83%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

CakePHP

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