2014-10-11 83 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') 
        ) 
       ), 
     ) 
    );