选择cakephp中不同控制器中的表

时间:2012-08-06 01:01:39

标签: php mysql cakephp

在我的用户控制器中,我试图在其个人资料中显示给定用户的帖子。我怎么能做到这一点?基本上,我在用户控制器中试图访问帖子表

这些是我的表

//Posts
id | body | user_id

//Users
user_id | username

这是我的用户的个人资料功能

  UsersController.php

  public function profile($id = null) {
    $this->User->id = $id;
    if (!$this->User->exists()) {  //if the user doesn't exist while on view.ctp, throw error message
        throw new NotFoundException(__('Invalid user'));
    }
    $conditions = array('Posts.user_id' => $id);
    $this->set('posts', $this->User->Posts->find('all',array('conditions' => $conditions))); 
}


/Posts/profile.ctp     

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

    <tr><td><?php echo $post['Post']['body'];?>
    <br>

    <!--display who created the post -->
    <?php echo $post['Post']['username']; ?>
    <?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>
</table>

我在参考profle.ctp

的每一行时得到了几个“未定义的索引错误”
Undefined index: Post [APP/View/Users/profile.ctp, line 11]

1 个答案:

答案 0 :(得分:1)

UsersController操作的profile中,您可以使用User模型访问相关信息。

示例:

class UsersController extends AppController {
    public function profile($id = null) {
        $this->User->recursive = 2;
        $this->set('user', $this->User->read(null, $id));
    }
}

UserPost模型中,您应该设置正确的关联:

User型号:

class User extends AppModel {
    public $hasMany = array('Post');
}

Post型号:

class Post extends AppModel {
    public $belongsTo = array('User');
}

您现在将在视图中看到$user变量,您拥有指定个人资料ID的所有用户数据,以及该用户的相关帖子。

This page in the CakePHP documentation在从模型中读取数据时提供了一些非常有用的提示。