2013-07-08 56 views
4

我有一個表叫group_joins: 以上表中的字段是喜歡,的hasMany在蛋糕PHP不工作

1)id, 
2)group_id, 
3)user_id, 
4)created 

,另外兩個表是用戶,user_groups, GROUP_ID參考user_groups的主鍵表和user_id引用用戶表的主鍵。

現在我創建了一個名爲GroupJoin的模型,並且我希望將以上兩個表(users,user_groups)表與group_joins關聯起來,以便我可以獲取已加入該組的所有用戶。

我將group_id作爲參數傳遞給動作。我必須獲取屬於該組的所有用戶。

我的模型如下:

var $belongsTo = array(
    'UserGroup' => array(
     'className' => 'UserGroup', 
     'foreignKey' => 'group_id' 
     ) 
    ); 

var $hasMany = array( 
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'user_id', 
     'conditions' => '',  
     ) 
    ); 

而且在我的控制器查詢如下:

$groupArrs = $this->GroupJoin->find('all',array('conditions'=>'GroupJoin.group_id ="'. $group_id.'"')); 

但它顯示了SQL錯誤:1054:未知列 'User.user_id' 在'字段列表'

那麼我該如何獲取屬於該組的所有用戶。

回答

0

首先,您對連接表的命名不遵循CakePHP約定。它應該是groups_users(模型名稱:GroupsUser)不是groups_join或任何表名稱。參見this pag e。

你的協會應該是:

  • 用戶hasAndBelongsToMany UsersGroup
  • UsersGroup屬於關聯用戶
  • UsersGroup屬於關聯用戶組

當一個用戶只能屬於一個用戶組你不需要在所有連接表。如果你現在嘗試相同的查詢(UsersGroup.group_id => $ groupId)它應該工作。

另外,您並沒有遵循CakePHP中變量名稱的約定:它應該是$ groupId而不是$ group_id。並使用適當的可見性範圍關鍵字而不是「var」。

0

將user_id創建爲數據庫中用戶表的外鍵。

0

我認爲最好遵循burzum的例子。

你的模型將是這樣的:

class User extends AppModel{ 
     public $hasMany = array(
     'UserGroup' => array(
      'className' => 'UserGroup', 
      'foreignKey' => 'user_id' 
     ) 
    );   
} 

class Group extends AppModel{ 
    public $hasMany = array(
     'UserGroup' => array(
      'className' => 'UserGroup', 
      'foreignKey' => 'group_id' 
    ) 
    ); 

} 
class UserGroup extends AppModel{ 
    public $belongsTo = array(
     'User' => array(
      'className' => 'User', 
      'foreignKey' => 'user_id', 
     ), 
     'Group' => array(
     'className' => 'Group', 
     'foreignKey' => 'group_id' 
     ) 
    ); 
} 

希望這會有所幫助。