Domanda

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

È stato utile?

Soluzione

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

Altri suggerimenti

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top