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

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

ただいまの
回答率

87.49%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,701
退会済みユーザー

退会済みユーザー

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

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

でなら
index.ctpで
      <?php

          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) {
              die("コネクションを確立できません。");
          }

      ?>

これで表示をちゃんとできるのですが、
controller内で
$this->set('res', $this->Report->find('all'));

だと一気に表示できなくなります。
ちなみに
controllerで
echo var_dump($this->Report->find('all'));
で、データをちゃんと取得できるのはわかっています。
この場合どう書けばよいのでしょうか。
ここ3日間悩んでいます。どうか教えてください。お願いいたします。


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

イメージ説明説明][WIDTH:449](642fe238639d769e06aa7bcc4d6d0e61.png)

解決
<?php
         foreach($res as $doc) {
             $id = $doc["Report"]["id"];
             $status = $doc["Report"]["status"];
             $modified = $doc["Report"]["modified"]->toDateTime()->format('Y-m-d H:i:s');
             $created = $doc["Report"]["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";
         }
これでいけましたー
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+3

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/22 13: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ついっぺんにとなるとやはりできないようです。

    キャンセル

  • 2015/06/22 13:51

    $doc["Report"]["id"];
    とかで取得できませんか?

    キャンセル

  • 2015/06/22 14:24

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

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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