$this->Post->Comment->
... относится к структуре модели. $this
обозначает этот экземпляр этого класса, а не текущую запись.
То есть $this
- это PostsController, $this->Post
- это модель Post, а $this->Post->Comment
- это модель Comment. Ни одно из них не относится к конкретной записи.
$this->Post->id
будет установлен, только если предыдущий запрос (в этом методе) получил однозначный результат, и я полагаюсь, что он устанавливается сразу после $this->MyModel->save($data)
, в противном случае я устанавливаю его явно, как:
$this->MyModel->id = $id;
Лично я бы сделал это следующим образом и извлек бы все необходимые связанные данные одним оператором:
$this->Post->contain(array('Comment')); // If you're using containable, which I recommend. Otherwise just omit this line.
$this->Post->read(null,$id);
Теперь у вас будет сообщение и связанные с ним комментарии в массиве, подобном следующему:
Array
(
[Post] => Array
(
[id] => 121
[title] => Blah Blah an More Blah
[text] => When the bar is four deep and the frontline is in witch's hats what can be done?
[created] => 2010-10-23 10:31:01
)
[Comment] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[title] => Alex
[body] => They only need visit the bar once in the entire night.
[created] => 010-10-23 10:31:01
)
[1] => Array
(
[id] => 124
[user_id] => 121
[title] => Ben
[body] => Thanks, Alex, I hadn't thought of that.
[created] => 010-10-23 10:41:01
)
)
)
... и вы получите в комментариях, как это:
$comments = $this->data['Comment'];
Все, что вы хотите (что вы можете точно настроить при вызове contain()
) относительно этого сообщения, возвращается в одном удобном пакете. Кстати, прочитайте о поведении Containable, если вы еще этого не сделали. Чем раньше вы начнете его использовать, тем легче станет жизнь.