2014-10-11 135 views
0

我不得不从postscakephp中包含两次模型关联

具有foreign keys
category_id引用categories.id
created_by引用users.idupdated_by引用users.id

我可以获取数据取created_byusername但不是两者都

$this->Post->Behaviors->load('Containable'); 

     $this->paginate = array(
      'conditions' => array('Post.category_id' => $id), 
      'order' => array('title'), 
      'contain' => array(
       'User'=>array(
         'fields'=>array('id','first_name','last_name','username'), 
         'conditions' => array('User.id = Post.created_by') 
        ), 
       //posts table has 2 fields(created_by & updated_by) associated with users table 
       //'User'=>array(
       //  'fields'=>array('id','first_name','last_name','username'), 
       //  'conditions' => array('User.id = Post.updated_by') 
       // ), 
       'Category'=>array(
        'Type'=>array(
         'fields'=>array('id','type_name') 
         ) 
        ), 
      ) 
     ); 

//桩模型

public $belongsTo = array(
    'User'=> array(
     'className' => 'User', 
     'foreignKey' => 'created_by', 
     'foreignKey' => 'updated_by' 
    ), 

); 

//用户模型

public $hasMany = array(
    'Post' => array(
     'className' => 'Post', 
     'foreignKey' => array('created_by','updated_by'), 
    ), 
); 

如何同时显示和别名都为用户(created_by & updated_by

+0

在发表你的模型,你定义邮政与用户之间的两个_belongsTo_关系?该别名(关系名称)是您用于可包含行为的内容。 – AgRizzo 2014-10-11 22:22:06

+0

2个模特加入编辑(帖子和用户) – alamnaryab 2014-10-12 00:13:31

回答

2

首先,你需要在Post模型中定义两种关系

public $belongsTo = array(
    'CreatedUser'=> array(
     'className' => 'User', 
     'foreignKey' => 'created_by' 
    ), 
    'UpdatedUser'=> array(
     'className' => 'User', 
     'foreignKey' => 'updated_by' 
    ) 
); 

现在在用户模型中创建相反的关系。

public $hasMany = array(
    'CreatedPosts' => array(
     'className' => 'Post', 
     'foreignKey' =>'created_by' 
    ), 
    'UpdatedPosts' => array(
     'className' => 'Post', 
     'foreignKey' => 'updated_by' 
    ), 
); 

然后,find()

$this->Post->Behaviors->load('Containable'); 

$this->paginate = array(
     'conditions' => array('Post.category_id' => $id), 
     'order' => array('title'), 
     'contain' => array(
      'CreatedUser'=>array(
        'fields'=>array('id','first_name','last_name','username') 
       ), 
      'UpdatedUser'=>array(
        'fields'=>array('id','first_name','last_name','username') 
       ), 
      'Category'=>array(
       'Type'=>array(
        'fields'=>array('id','type_name') 
        ) 
       ), 
     ) 
    );