cakephp:如何显示关联记录的关联记录

时间:2011-02-25 15:41:36

标签: cakephp find recursive-query

我的目标是在视图中显示相关子模型的记录(一旦删除)。我知道将递归值设置为“1”会返回当前模型,其所有者以及相关模型。

我不知道该怎么做才在视图中显示。

我的方法是在控制器中创建一个可变量,保存相关模型ID的值,但这不起作用。

*我还应该提一下,我在锦标赛中使用了一个可缓慢的行为,所以它不是$ id,而是$ slug。

以下是模型视图控制器详细信息:

模型

锦标赛 - 有很多锦标赛详情

tournamentDetails - 有很多更新

更新 - 属于tournamentDetails

锦标赛控制员 action = view

class TournamentsController extends AppController 

function view($slug = null) {
  if (!$slug) {
      $this->Session->setFlash(__('Invalid Tournament.', true));
      $this->redirect(array('action'=>'index'));
  }
$this->Tournament->recursive = 1;
$tournament = $this->Tournament->findBySlug($slug);
$updates = $this->Tournament->TournamentDetail->Update->find('all', array('conditions'=>array('update.tournament_detail_id' => $this->data['tournament_details'] ['id'] )) );
$this->set(compact('tournament','updates' ));

比赛视图。这将显示“锦标赛详情”和(理想情况下)相关锦标赛详情“更新”

<h2><?php echo $tournament['Tournament']['name']; ?></h2>

<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
 <h1><?php echo $tournamentDetail ['title']; ?></h1>
 <p><?php echo $tournamentDetail ['body']; ?></p>
<?php endforeach; ?>

<?php foreach ($updates['Update'] as $update): ?>
 <h4>Update: <?php echo $update  ['date']; ?></h4>
 <p> <?php echo $update ['Update'] ['title']; ?></p>
 <p><?php echo $update ['Update'] ['body']; ?></p>
<?php endforeach; ?>

当我调试$ updates时,这就是我所看到的:

Array
(
)

我不知道我在这里做错了什么。

使用以下方法构造查找条件不正确:

 ('conditions'=>array('update.tournament_detail_id' => $this->data['tournament_details'] ['id'] )

感谢您的帮助。 保罗

1 个答案:

答案 0 :(得分:2)

您可以使用Containable行为详细指定要从关联模型获得的字段,关联模型与关联模型等等。然后,您将在数组$tournament中找到所有数据,如链接中的示例所示。

编辑(作为对OP评论的回应)。我认为问题可能是使用魔术findBy方法。您需要使用标准find替换它,就像在此示例中一样

$tournament = $this->Tournament->find('first', array(
    'conditions' => array(
        'slug' => $slug
    ),
    'contain' => array(//Put here the settings for Containable
    )
));