Question

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

Was it helpful?

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',
        )
);
}
?>

OTHER TIPS

I assume you are saving user id in comments table and user names are in users table who posts the comment, then use the below solution

In Controller method:

$userdata=$this->User->find('all',array('fields'=>array('id','username'),'recursive'=>-1));
$userid=Set::extract('/User/id', $userdata);
$username=Set::extract('/User/username', $userdata);
$data=array_combine($username,$userid);
$this->set('name',$data);

In View:

$cid=$var['Comment']['user_id'];
$username=array_search($cid, $name);
echo $username;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top