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

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

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

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

CakePHP

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

Q&A

解決済

1回答

3218閲覧

CakePHP3でtemplateにforeachを使わずにDBから取得した値を表示する方法

ShotaTada

総合スコア14

MySQL

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

CakePHP

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

0グッド

0クリップ

投稿2016/08/29 01:03

CakePHP3で1対多の関係のテーブルをinner joinして値を取得しています。

Memberテーブルに対し、複数のコンテンツが紐づく構成です。

$query = $this->Members->find() ->select(['members.id','members.name','contents.id','contents.name']) ->join([ 'table' => 'contents', 'type' => 'INNER', 'conditions' => 'contents.member_id = Members.id' ]) $this->set('recode',$this->paginate($query));

上記をTemplate側で表記するところで困っています。
やりたいこととしましては、
タイトルに、上記で取得したmembers.nameを表示
その下に、コンテンツをforeachで複数表示するです。

//ここにmembers.nameを表示したい <h1>○○さんの記事一覧</h1> <?php foreach ($recode as $item): ?> //コンテンツをループで表示 <?= $item->contents['name'] ?> <?php endforeach; ?>

どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

例示ではforeachしているようですがそれを辞めたいということでしょうか?
一次配列でうけられるならimplodeするだけでよいでしょうけど
それにしてもnameをリスト形式にもせず冗長に表示するような仕様で本当によいのでしょうか?

追記

データの持ち方を工夫すればよいでしょう

PHP

1//元データ$aが並列なもちかたなら 2$a=[ 3 ["member_name"=>"たろう","contents_name"=>"コンテンツ1"], 4 ["member_name"=>"たろう","contents_name"=>"コンテンツ2"], 5 ["member_name"=>"たろう","contents_name"=>"コンテンツ3"], 6 ["member_name"=>"じろう","contents_name"=>"コンテンツ4"], 7 ["member_name"=>"じろう","contents_name"=>"コンテンツ5"], 8 ]; 9//新たに$bとしてmember_nameで取りまとめる 10$b=[]; 11foreach($a as $val){ 12 $b[$val["member_name"]][]=$val["contents_name"]; 13} 14foreach($b as $key=>$vals){ 15 print $key."<br>"; 16 foreach($vals as $val){ 17 print $val."<br>"; 18 } 19}

投稿2016/08/29 02:30

編集2016/08/29 03:49
yambejp

総合スコア114572

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

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

ShotaTada

2016/08/29 03:34

ご回答いただきありがとうございます。 わかりずらくて申し訳ありません。。。 foreachをやめたいわけではありません。 DBから取得する内容としましては下記のようになります。 members.id | members.name | contents.id | contents.name 1 | たろう | 1 | コンテンツ1 1 | たろう | 2 | コンテンツ2 1 | たろう | 3 | コンテンツ3 contentsテーブルのデータに関しては、行ごとに内容が変わりますが、membersテーブルのデータは全て同一のものが取得されます。 そのためcontentsの内容のものはforeachでループして表示、 membersのものはforeachを使用せずに1度だけ表示したいと考えています。 どうぞよろしくお願いいたします。
yambejp

2016/08/29 03:50

追記しましたが、そういうことでしょうか?
ShotaTada

2016/08/30 02:00

追記いただきありがとうございます。 <?= $recode ->item[0] ->members['name']?> てっきり上記のような記載で表示できるものだと思っていましたが、 記載いただいた内容で解決できました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問