2013-03-04 48 views
1

我在CakePHP模型关联中遇到困难。我之前没有使用过OOP或MVC,而且我发现它有点棘手。请帮我用我的CakePHP模型关系

以下是我有:

Clubs 

系统上的用户是 “俱乐部”。在舞厅里有各个领域,包括主要联络人 - clubs.club_primary_contact_id

Teams 

俱乐部可以有与之相关联的一个或多个团队。与俱乐部一样,球队也有主要联系人 - teams.team_primary_contact_id。团队也有一个类型,并链接到类型表 - teams.type_id。通过球队与俱乐部挂钩。俱乐部可以有一个或多个与他们相关联的联系人。经由contacts.club_id连接到球杆

Types 

types.id和types.type_name

我希望能够访问俱乐部/视图/ x和显示页面示出以下内容:

  • 俱乐部主要联络人姓名/电子邮件
  • 所有俱乐部接触
  • 所有的俱乐部队,包括团队主要联络人姓名/电子邮件

TeamsController的添加/编辑/删除功能正常工作 - 即我可以调用联系人列表&类型并在视图窗体的选择框中显示这些类型。

我无法从俱乐部模式访问了这一切,虽然整齐。

我在这里有什么关联?这就是我目前在模特班里所拥有的。

应用/型号/ Club.php

public $hasMany = array(
    'Team' => array(
     'className' => 'Team', 
     'foreignKey' => 'club_id' 
    ), 
    'Contact' => array(
     'className' => 'Contact', 
     'foreignKey' => 'club_id', 
     'order' => 'contact_name DESC' 
     ) 
); 

public $belongsTo = array (
    'ClubPrimaryContact' => array(
     'className' => 'Contact' 
    ) 
); 

应用/型号/ Team.php

public $belongsTo = array (
    'TeamPrimaryContact' => array(
     'className' => 'Contact' 
    ), 
    'Club', 
    'Type' 
); 

应用/型号/ Contact.php

public $hasManyAndBelongsTo = array(
    'Team' => 
     array(
      'className' => 'Team' 
     ) 
); 

应用/型号/ Type.php

public $belongsTo = array (
    'Team' => array(
     'className' => 'Team' 
    ) 
); 

回答

0

坚持公约会有点帮助在这里。

如果你想俱乐部属于接触 - 给它一个CONTACT_ID并设置在俱乐部模式联系一个belongs_to的关系。你需要给这种关系不同的别名到HAS_MANY关系别名 - 所以像:

public $belongsTo = array(
     'Leader' => array(
      'className' => 'Contact' 
     ) 
    ); 

同样的团队,定义belongs_to的,用于与别名的领导者CONTACT_ID,和常规的has_many关系的联系人。

然后,在查询时 - 您需要设置足够高的递归以获得所有结果,或者一旦您完成了工作,使用可包含的行为来优化查询。

然后,只需查询按正常&使用debug()看到阵列结构返回

+0

设置递归是我的问题。我之前并没有真正理解这方面的内容。谢谢! – gazareth 2013-03-05 21:09:59