蛋糕php访问表

时间:2013-12-11 14:47:56

标签: php cakephp

我刚刚开始使用cakephp教程 我能够在我的帖子控制器中获取帖子表并将其写入我的index.ctp

在我对帖子控制器的看法中,我还想列出发布文章的用户名。我的帖子表有一个user_id,所以我需要将它与我的用户表匹配并传递给

class PostsController extends AppController {

public function index() {
      //passes values to the view
      $this->set('posts', $this->Post->find('all')); 
      //is "Post" a post method? or is it the name of the table? i'm unsure of the syntax

      $this->set('users', $this->Users->find('all')); //this does not work

    }
}

感谢您对此基本问题的帮助

3 个答案:

答案 0 :(得分:1)

您必须使用'recursive'

$this->Post->find('all', array(
    'recursive' => 2,
    // ...
));

当然,您首先需要link models together

答案 1 :(得分:0)

我假设您已经设置了belongsTo关联(Post belongsTo User)和/或hasMany关联(User hasMany Post)。如果是这样,cake会自动带来相关模型(除非你在模型上加上$ recursive = -1)。 因此,您可以访问与视图上每个帖子相关的用户:posts [i] ['User'] 您还可以在视图上使用它来查看视图变量:

debug($this->viewVars)
如果你不这样做,请将它放在你的Post模型上:

public $belongsTo = array(
    'User' => array(
        'className'  => 'User',
        'foreignKey' => 'user_id',
    )
);

答案 2 :(得分:0)

确保正确加载模型(如果要在PostsController中加载User模型)。 所以只需在类控制器中添加此属性即可。

public $uses = array('Post','User');

将模型链接在一起。你需要在Post模型中添加关联。

public $belongsTo = array(
    'User'=>array(
        'className'=> 'User',
        'foreignKey'=>'user_id'
        )
);

我希望从数据库中检索数据,你必须设置递归,有两种方法 第一个:

$posts = $this->Post->find('all',array('recursive'=>2));
// or
$this->Post->recursive = 2;
$posts = $this->Post->find('all');

第二个:使用Containable行为 在AppModel中将递归设置为-1并包含行为

public $recursive = -1;
public $actsAs = array('Containable');

因此,您可以使用任何其他链接模型来回复帖子

$posts = $this->Post->find('all',array(
     'contain'=>array('User'),
      // ...
)));