CakePHP从遥远的关系中获取数据

时间:2011-10-10 18:28:19

标签: php cakephp

以下是一个示例,并没有在我的应用程序中使用,但我希望得到理论并在获得回答者后将其应用于我自己的应用程序。

因此,请使用包含3个表的简单应用:用户,位置和帖子

并且关系是帖子有用户而用户有位置但是位置不一定有用户。

如果我拉一个帖子列表然后显示该帖子的用户就可以了。但是,如果我想拉出用户的位置呢?因为它们与帖子和位置之间没有关系,但它们是用户和帖子之间的关系。我该怎么做?

循环示例:

<?php foreach($posts as $post): ?>

<?php echo $this->Html->link($post['User']['firstname'], array('controller'=>'users','action'=>'view','userName'=>$post['User']['username'])); ?> in <?php echo $this->Html->link($post['Place']['name'], array('controller'=>'places','action'=>'view',$post['Place']['id'])); ?>

这是控制器:

function index()
    {
        $posts = $this->paginate();

        if (isset($this->params['requested']))
        {
            return $posts;
        }
        else
        {
            $this->set('posts', $posts);
        }
    }

现在这不会起作用,因为Place未定义!我该怎么做?

我听说过Containable,但有些例子会很棒!

1 个答案:

答案 0 :(得分:0)

查看可包含的行为。它不仅可以帮助您解决此问题,还可以确保仅检索,解析和返回所需的数据,从而帮助您提高应用程序的性能。

e.g。

function index()
    {
        $this->paginate = array(
           'contain' => array('User' => array('Location')),
        );
        $posts = $this->paginate();

        if (isset($this->params['requested']))
        {
            return $posts;
        }
        else
        {
            $this->set('posts', $posts);
        }
    }