phpcakephpcakephp-1.3containable

Show the user's username in post view w/ related comment


I am a newbie in CakePHP 1.3... I want to display or show the USER's username instead of USER's id, who post the COMMENTS in the POST view... Anyone can help me please?

Here is the model association I made:

  1. POSTS 'has many' COMMENTS
  2. COMMENTS 'belongs to' USERS

POST->COMMENT->USER

I already read the Containable Behavior of CakePHP 1.3, but still I can't understand it well... Please help me what codes to put in the post_controller's view & view.ctp that can show the related's related table in the POST view.

And How to call the USER's data in the POST view.

I'm still confused.

Thanks in Advance, Azure


Solution

  • Assumptions

    You have three tables as below

    (1) Posts
        *  id
        *  title
    
    (2) Comments
        * id
        * post_id
        * user_id
    
    (3) Users
        * id
        * name
    

    View Function in PostsController.php file

    public function view($id) {
        if (!$id) {
            throw new NotFoundException(__('Invalid post'));
        }
    
        $this->Post->recursive=2;
        $post = $this->Post->findById($id);
        if (!$post) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('post', $post);
    }
    

    Content of view.ctp file in app/View/Posts/ folder

    <!-- File: /app/View/Posts/view.ctp -->
    <h1><?php echo 'Post ID : '.h($post['Post']['id']); ?></h1>
    <h1><?php echo 'Post Title : '.h($post['Post']['title']); ?></h1>
    <?php 
    echo 'Comments By Users : ';
    if(!empty($post['Comment'])){
        foreach ($post['Comment'] as $key=>$value){?>
        <p>User Name : <?php echo $value['User']['name'];?></p>
        <?php }
    }
    else {
        echo '<br/>';
        echo 'No Comments Yet';
    } ?>
    

    Model File : User.php

    <?php
    class User extends AppModel {
        public $hasMany = array(
            'Comment' => array(
                    'className' => 'Comment',
            )
    );
    }
    ?>
    

    Model File : Comment.php

    <?php
    class Comment extends AppModel {
    public $belongsTo = array(
            'User' => array(
                    'className' => 'User',
                    'foreignKey' => 'user_id'
            )
    );
    }
    ?>
    

    Model File : Post.php

    <?php
    class Post extends AppModel {
    public $hasMany = array(
            'Comment' => array(
                    'className' => 'Comment',
            )
    );
    }
    ?>