我刚刚开始使用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
}
}
感谢您对此基本问题的帮助
答案 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'),
// ...
)));