以下はコントローラーの一部です。ちなみに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);
とかやっても取れません
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'];
}
なるほど、これでとればいけました。ありがとうございます