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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

Q&A

解決済

1回答

1486閲覧

CakePHP3.5で直接クエリの結果をSelectBoxに入れたい

gekota

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

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

0グッド

0クリップ

投稿2017/11/14 08:12

CakePHP3でストアドプロシージャを使って、複雑なクエリ結果をSelectBoxに入れたいです。

ConnectionManager::getを使って、ストアドプロシージャからデータ抽出は出来ていますが、配列の配列みたいになってしまい、ビューのSelectBoxに入れると表示内容が入れ子になってしまいます。
ストアドと同じクエリをTableRegistry::getで処理すると問題無くSelectBoxに入れる事が出来ます。

デバッグで、抽出したデータを見ると、下記のような違いがありました。
直接クエリの結果をSelectBoxに入れには、どうしたら宜しいでしょうか?

php

1 2/// TableRegistry::getで抽出したデータ 3Array 4( 5 [1] => なまえ1 6 [2] => なまえ2 7 [3] => なまえ3 8) 9 10/// ConnectionManager::getで抽出したデータ 11Array 12( 13 [0] => Array 14 ( 15 [id] => 1 16 [name] => なまえ1 17 ) 18 19 [1] => Array 20 ( 21 [id] => 2 22 [name] => なまえ3 23 ) 24 25 [2] => Array 26 ( 27 [id] => 3 28 [name] => なまえ3 29 ) 30)

php

1$this->mTest = TableRegistry::get('m_tests'); 2$date1 = $this->mTest->find() 3 ->where(['is_deleted' => 0]) 4 ->select(['id', 'name']) 5 ->combine('id', 'name') 6 ->toArray(); 7print_r($date1); 8 9$connection = ConnectionManager::get('default'); 10$date2 = $connection->execute('call st_test_1;')->fetchAll('assoc'); 11print_r($date2);

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

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

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

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

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

guest

回答1

0

自己解決

PHPのarray_column()というので解決しました!

php

1$connection = ConnectionManager::get('default'); 2$date3 = $connection->execute('call st_test_1;')->fetchAll('assoc'); 3$date2 = array_column($date3, 'id','name'); // 追加 4print_r($date2);

参考
https://qiita.com/harukasan/items/a0773aef27d838852e44

投稿2017/11/14 08:19

gekota

総合スコア8

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問