人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHPで hasmanyを使っています。バージョンは1.3です。
以下はコントローラーの一部です。ちなみにpaginateを使っていますが、find allでやっても結果は同じでした。
function all()
{
$this->set('shops',$this->paginate());
debug($this->paginate());
}
【debug($this->paginate())の出力結果】
Array
(
[0] => Array
(
[Shop] => Array
(
[id] => 2716
[shop_name] => 店舗1
[address] => 東京都新宿区
[url] => http://www.example.com/
[created] => 2010-12-29 16:42:50
[modified] => 2011-02-03 17:14:35
)

[Pearson] => Array
(
[0] => Array
(
[id] => 69
[shop_id] => 2716
[name] => 名前
[created] => 2011-02-02 18:02:33
[modified] => 2011-02-02 18:02:33
)

)

)
コントローラー内で[shop]の[id]がとりたいのです。
view内では取れるのですが、コントローラー内でとりたいんです。
debug($this->paginate()->Shop->id);
とかやっても取れません


●質問者: goodbabies
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2011-02-02 2011-02-03 4:3 ALL CakePHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●60ポイント ベストアンサー

dumpしてるから分かると思いますが、取れてますよね?

データ構造で勘違いされているようです。

$all = $this->paginate();
foreach ($all as $item) {
 echo $item['Shop']['id'];
}

とか実行すれば表示されるでしょう。

debug($this->paginate()->Shop->id);

これに近い形でしたければ、先頭の結果という前提でよければ、

debug(($this->paginate())[0]['Shop']['id']);

一応、補足しておきますが、->(アロー演算子)はオブジェクトのメンバにアクセスし、[]は連想配列の要素にアクセスできます。

cakePHPのModelを経由して取得した結果は、オブジェクトではなく連想配列に格納されますので、このような形でアクセスする必要があります。

◎質問者からの返答

debug(($this->paginate())[0]['Shop']['id']);

こちらはエラーになりましたが、

foreach ($all as $item) {

echo $item['Shop']['id'];

}

なるほど、これでとればいけました。ありがとうございます

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ