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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

CakePHP

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

Q&A

解決済

1回答

4057閲覧

cakephp3 JOINした情報を画面に出力したい

XYZA

総合スコア20

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

CakePHP

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

0グッド

0クリップ

投稿2016/06/22 11:41

編集2016/07/06 04:23

###前提・実現したいこと
cakephp3を使用して、区分値マスタの情報を電話番号マスタテーブルJOINさせて区分名を表示させたい
■困っていることその1:whereのIDを画面から取得した$idとしたい(idが取得できているのは確認済み)がうまく取得できない
■困っていることその2:whereのIDをDBに存在する情報(固定値)に変更し取得した場合、画面に表示ができない

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

■困っていることその1

Error: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

SQL Query:

WHERE (CallNumbers.A_id = :id ...

と表示されているので、うまく代入ができていないと思われます

■困っていることその2
実行後に取得した配列は以下のような形で取得されました

Cake\ORM\ResultSet Object ( [items] => Array ( [0] => App\Model\Entity\CallNumber Object ( [call_number_kbn_nm] => PC [call_number] => 1234567890 [[new]] => [[accessible]] => Array ( [*] => 1 ) [[dirty]] => Array ( ) [[original]] => Array ( ) [[virtual]] => Array ( ) [[errors]] => Array ( ) [[invalid]] => Array ( ) [[repository]] => CallNumbers ) ) )
<?= h($results) ?>の場合文字列で
(object)Cake\ORM\ResultSet

と表示され、

<?= h($results ->call_number_kbn_nm) ?>の場合
Notice (8): Undefined property: Cake\ORM\ResultSet::$call_number_kbn_nm

とエラーが表示されます。

###該当のソースコード

cakephp3

1/*....Controller.php*/ 2$query = $CallNumber -> find() 3 -> hydrate(true) 4 -> join(['table' => 'kbn_masters', 5 'alias' => 'km', 6 'type' => 'INNER', 7 'conditions' => [ 8 'km.kbnid = CallNumbers.call_number_kbn', 9 'km.subjectid = 2',] 10 ]) 11 ->where('CallNumbers.A_id = :id', ['id' => $id]) 12 -> select([ 13 "call_number_kbn_nm" => "km.kbn_name", 14 "call_number" => "CallNumbers.call_number"]) 15 ; 16 17$results = $query -> all(); 18this -> set('results', $results);
/*view.ctp*/ <?php foreach ($results as $result): ?> <tr> <th><?= __('電話番号') ?></th> <td><?= h($results) ?></td> <td><?= h($results ->call_number_kbn_nm) ?></td> <td><?= h($results ->call_number) ?></td> </tr> <?php endforeach; ?>

電話番号マスタのcall_number_kbnに対応する区分マスタはsubjectidが2のものとなります。

SQL取得イメージ

SQL

1select 2 call_numbers.A_id 3 , kbn_masters.kbn_name 4 , call_numbers.call_number 5from 6 call_numbers 7 inner join kbn_masters 8 on kbn_masters.subjectid = 2 9 and call_numbers.call_number_kbn = kbn_masters.kbnid 10where 11 call_numbers.A_id = /*id*/;

###補足情報(言語/FW/ツール等のバージョンなど)
cakephp3 phpMyAdmin

cakephp初心者です。
このようなサイトに投稿するのも初めてです。

ご不明点等ございましたら指摘のほどお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

■困っていることその1
これは、Where句による検索条件の設定方法に誤りがあると思います
以下のようにすることで、検索ができることまでを確認しています

CakePHP

1 ->where(['CallNumbers.studio_id' => $id])

■困っていることその2
これはご自身も書いているように$resultsで取得される検索結果は、配列として格納されており、たとえ検索結果が1件でも、その要素を取り出して処理する必要があります(foreachの部分ですね)
そのため、VIEWで表示する検索結果は、$resultsではなく$resultの要素となります

CakePHP

1<?php foreach ($results as $result): ?> 2 3 <tr> 4 <th><?= __('電話番号') ?></th> 5 <td><?= h($result) ?></td> 6 <td><?= h($result ->call_number_kbn_nm) ?></td> 7 <td><?= h($result ->call_number) ?></td> 8 </tr> 9<?php endforeach; ?>

ただし、h($result)は$result自体も配列のため、
{ "id": 2, "call_number_kbn_nm": "kubun_002", "call_number": "03-5555-6666" }
というような表示となります

投稿2016/06/23 02:59

KatsumiTanaka

総合スコア924

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

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

XYZA

2016/06/23 03:11

本当にありがとうございました。無事表示できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問