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

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

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

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

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

CakePHP

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

Q&A

解決済

1回答

2156閲覧

「HELP!!!」cakephp $this->Report->find('all');でforeachが表示できない。

退会済みユーザー

退会済みユーザー

総合スコア0

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

PHP

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

CakePHP

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

0グッド

0クリップ

投稿2015/06/21 19:22

編集2015/06/22 05:27

mongodbのreportscollectionの中にあるdataを引き出そうと頑張っているのですが、
controller内で

lang

1$this->set('res', $this->Report->find());

でなら
index.ctpで

lang

1 <?php 2 3 try { 4 foreach($res as $doc) { 5 $id = $doc["id"]; 6 $status = $doc["status"]; 7 $modified = $doc["modified"]->toDateTime()->format('Y-m-d H:i:s'); 8 $created = $doc["created"]->toDateTime()->format('Y-m-d H:i:s'); 9 10 echo "<tr id='$id'> 11 <td>$status</td> 12 <td><a href='../details/index?id=$id'>$id</a></td> 13 <td>$modified</td> 14 <td>$created</td> 15 </tr>\n"; 16 } 17 } catch(MongoCollectionException $e) { 18 die("コネクションを確立できません。"); 19 } 20 21 ?>

これで表示をちゃんとできるのですが、
controller内で

lang

1$this->set('res', $this->Report->find('all'));

だと一気に表示できなくなります。
ちなみに
controllerで

lang

1echo var_dump($this->Report->find('all'));

で、データをちゃんと取得できるのはわかっています。
この場合どう書けばよいのでしょうか。
ここ3日間悩んでいます。どうか教えてください。お願いいたします。

追記
$this->Report->find('all');とした場合、以下のようなエラーが表示されます。

![イメージ説明]WIDTH:449説明]WIDTH:449

解決

lang

1<?php 2 foreach($res as $doc) { 3 $id = $doc["Report"]["id"]; 4 $status = $doc["Report"]["status"]; 5 $modified = $doc["Report"]["modified"]->toDateTime()->format('Y-m-d H:i:s'); 6 $created = $doc["Report"]["created"]->toDateTime()->format('Y-m-d H:i:s'); 7 8 echo "<tr id='$id'> 9 <td>$status</td> 10 <td><a href='../details/index?id=$id'>$id</a></td> 11 <td>$modified</td> 12 <td>$created</td> 13 </tr>\n"; 14 }

これでいけましたー

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

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

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

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

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

guest

回答1

0

ベストアンサー

index.ctp 内の一行目に下記を記述して、Viewファイルファイにデータが着ているか確認して下さい。

echo var_dump($res);
exit;

記述的には、データがきているかと思います。
その次に、try~catch文のエラー内に、下記の記述を追記してみて下さい。

try {
foreach($res as $doc) {
$id = $doc["id"];
$status = $doc["status"];
$modified = $doc["modified"]->toDateTime()->format('Y-m-d H:i:s');
$created = $doc["created"]->toDateTime()->format('Y-m-d H:i:s');

echo "<tr id='$id'> <td>$status</td> <td><a href='../details/index?id=$id'>$id</a></td> <td>$modified</td> <td>$created</td> </tr>\n"; }

} catch(MongoCollectionException $e) {
var_dump("test");
exit;
die("コネクションを確立できません。");
}

恐らくですが、catch文の方に分岐ロジックが走っているのではないでしょうか?

また、気になってのですが、Viewファイル内にtry~catch文が書かれておりますが、本来であればこの記述は、controller内に記述するのではないかと思います。

<?php foreach($res as $doc) { $id = $doc["id"]; $status = $doc["status"]; $modified = $doc["modified"]->toDateTime()->format('Y-m-d H:i:s'); $created = $doc["created"]->toDateTime()->format('Y-m-d H:i:s'); echo "<tr id='$id'> <td>$status</td> <td><a href='../details/index?id=$id'>$id</a></td> <td>$modified</td> <td>$created</td> </tr>\n"; } ?>

のみで大丈夫ではないでしょうか?

投稿2015/06/21 23:20

takayukiinaba

総合スコア1158

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

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

退会済みユーザー

退会済みユーザー

2015/06/22 02:29

丁寧な回答ありがとうございます! 確かに、記述の内容はforeachで十分でした。ありがとうございます。 しかし、$this->Report->find('all');だと undefined indexとでてきてしまいます。
takayukiinaba

2015/06/22 04:06

という事は、変数$resの中身を確認した方が早いかもしれません。 undefined indexと出ると言う事は、$resの中身は空ではないがデータ配列が異なったりしている為参照できていないのかもしれません。 echo var_dump($res); exit; の実行結果を教えてもらえるとサポートしやすいのですが・・・。 もし、上記のvar_dumpを実行してなにも表示されない場合は、恐らくデータが取れていない可能性が考えられます。
退会済みユーザー

退会済みユーザー

2015/06/22 04:49

var_dumpの結果、データは表示されました。 array(4) { [0]=> array(1) { ["Report"]=> array(10) { ["message"]=> string(4) "test" ["requestId"]=> object(MongoId)#44 (1) { ["$id"]=> string(24) "55823db2caa33cf00b680f09" } ["userObjectId"]=> object(MongoId)#45 (1) { ["$id"]=> string(24) "558136d23a102d409b41af74" } ["created"]=> object(MongoDate)#46 (2) { ["sec"]=> int(1434598844) ["usec"]=> int(960000) } ["modified"]=> object(MongoDate)#47 (2) { ["sec"]=> int(1434598844) ["usec"]=> int(960000) } ["status"]=> string(1) "1" ["comment"]=> string(5) "test1" ["reason"]=> int(0) ["__v"]=> int(0) ["id"]=> string(24) "55823dbccaa33cf00b680f0b" } } [1]=> array(1) { ["Report"]=> array(10) { ["message"]=> string(5) "mouri" ["requestId"]=> object(MongoId)#48 (1) { ["$id"]=> string(24) "55823e3bcaa33cf00b680f0c" } ["userObjectId"]=> object(MongoId)#49 (1) { ["$id"]=> string(24) "558136d23a102d409b41af74" } ["created"]=> object(MongoDate)#50 (2) { ["sec"]=> int(1434598985) ["usec"]=> int(762000) } ["modified"]=> object(MongoDate)#51 (2) { ["sec"]=> int(1434598985) ["usec"]=> int(762000) } ["status"]=> string(1) "1" ["comment"]=> string(5) "test2" ["reason"]=> int(0) ["__v"]=> int(0) ["id"]=> string(24) "55823e49caa33cf00b680f0e" } } [2]=> array(1) { ["Report"]=> array(10) { ["message"]=> string(5) "test3" ["requestId"]=> object(MongoId)#52 (1) { ["$id"]=> string(24) "558245fbcaa33cf00b680f0f" } ["userObjectId"]=> object(MongoId)#53 (1) { ["$id"]=> string(24) "558136d23a102d409b41af74" } ["created"]=> object(MongoDate)#54 (2) { ["sec"]=> int(1434600974) ["usec"]=> int(936000) } ["modified"]=> object(MongoDate)#55 (2) { ["sec"]=> int(1434600974) ["usec"]=> int(936000) } ["status"]=> string(1) "0" ["comment"]=> string(5) "test3" ["reason"]=> int(0) ["__v"]=> int(0) ["id"]=> string(24) "5582460ecaa33cf00b680f11" } } [3]=> array(1) { ["Report"]=> array(10) { ["message"]=> string(9) "ごりら" ["requestId"]=> object(MongoId)#56 (1) { ["$id"]=> string(24) "5583e1121dbd2c7d1795fef8" } ["userObjectId"]=> object(MongoId)#57 (1) { ["$id"]=> string(24) "558136d23a102d409b41af74" } ["created"]=> object(MongoDate)#58 (2) { ["sec"]=> int(1434706206) ["usec"]=> int(900000) } ["modified"]=> object(MongoDate)#59 (2) { ["sec"]=> int(1434706206) ["usec"]=> int(900000) } ["status"]=> int(0) ["comment"]=> string(5) "test4" ["reason"]=> int(0) ["__v"]=> int(0) ["id"]=> string(24) "5583e11e1dbd2c7d1795fefa" } } } あと$this->Report->find('all')[0];などにすると、その配列のデータは表示されました。 が、4ついっぺんにとなるとやはりできないようです。
takayukiinaba

2015/06/22 04:51

$doc["Report"]["id"]; とかで取得できませんか?
退会済みユーザー

退会済みユーザー

2015/06/22 05:24

きました!いけました!!!!ありがとうございます!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問