2011-03-31 87 views
0

目前我的关系模型船只设立在下列方式CakePHP的模型关系不提供反向引用

class Post extends AppModel { 
    var $name = 'Post'; 
    var $displayField = 'title'; 
    var $hasMany = array('Comment'); 
    var $belongsTo = array('User'); 
} 

class User extends AppModel { 
    var $name = 'User'; 
    var $displayField = 'username'; 
    var $hasMany = array('Post', 'Comment'); 
} 

class Comment extends AppModel { 
    var $name = 'Comment'; 
    var $displayField = 'id'; 
    var $belongsTo = array('User', 'Post'); 
} 

当我试图指在评论部分的用户名在我的帖子查看 它的错误了说无效的指数,在进一步inestigation我已经注意到,我的模型不包括用户信息,作为我的意见被纳入有关的职位

结果数组看起来像这样仅在用户信息后引用:

Array 
(
    [Post] => Array 
     (
      [id] => 1 
      [title] => test post 
      [user_id] => 1 
      [body] => this is a test post 
      [date_posted] => 0000-00-00 00:00:00 
      [url_slug] => this-is-a-test-post 
     ) 

    [User] => Array 
     (
      [id] => 1 
      [username] => admin 
      [password] => e7b9f7bc09beee85947ef987d7df49df136c7c38 
      [first_name] => Chris 
      [last_name] => McGrath 
      [roles] => Admin 
      [email] => [email protected] 
      [last_login] => 0000-00-00 00:00:00 
      [member_since] => 0000-00-00 00:00:00 
      [FacebookProfile] => 
      [TwitterUserName] => 
     ) 

    [Comment] => Array 
     (
      [0] => Array 
       (
        [id] => 5 
        [post_id] => 1 
        [user_id] => 1 //expecting this to pull user model for each 
        [comment] => test comment 
       ) 

     ) 

) 

我的问题是,是这之中造成什么我在模型协会做的正确,是模型框架,这限制或者我应该可以手动从用户模型在这种类型的实例抢夺用户

+0

我不明白。你想从评论模型中获取用户吗? – santiagobasulto 2011-03-31 17:42:38

+0

不,我想要的用户名和一些其他信息构建jquery工具提示 – 2011-04-04 09:29:56

回答

0

试着做这样的事情:

$this->Post->recursive = 2; //This will get all the comments and their relationships 
$post = $this->Post->read(null,$post_id); //The way you were getting your post. 
debug($post); // You will see what it gets 

编辑: 你可以试试这个太:

$this->Post->Comment->recursive = 2; 
+0

所以我应该在我的控制器或我的模型中定义这个? – 2011-03-31 17:47:22

+0

nm我明白了,谢谢你的诀窍 – 2011-03-31 17:52:52

+0

在你的控制器里。渲染视图之前。可能你是在“观看”行动。你有一个“视图”函数,在你的PostController中设置$ post到posts/view.ctp视图。所以,在你的view()函数的某个地方(在控制器中),你有一行可以获取你想要显示的Post(必须是读取的地方)。在读之前,你应该把“$ this-> Post-> recursive = 2” – santiagobasulto 2011-03-31 17:53:16

0

使用递归= 2永远不是一个好主意。

$this->Post->find(
    'first', 
    array(
     'conditions' => array(
      'Post.id' => $id 
     ), 
     'contain' => array(
      'User', 
      'Comment' => array(
       'User' => array(
        'fields' => array(
         'User.id', 
         'User.name' 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

http://book.cakephp.org/view/1323/Containable

+0

@ dogmatic96他是个初学者。在这种情况下,我认为没有问题。所有取材都将被使用。 – santiagobasulto 2011-04-01 14:27:02