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);
とかやっても取れません

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/02/10 11:52:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント60pt

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

id:goodbabies

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

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

foreach ($all as $item) {

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

}

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

2011/02/04 13:14:04

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません