请帮我解决CakePHP模型的关系

时间:2013-03-04 23:29:12

标签: cakephp cakephp-2.3

我无法理解CakePHP中的模型关联。我之前没有使用OOP或MVC,我发现它有点棘手。

这就是我所拥有的:

Clubs

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

Teams

俱乐部可以拥有一个或多个与之相关的团队。像俱乐部一样,球队也有一个主要联系人 - teams.team_primary_contact_id。团队也有一个类型,并链接到类型表 - teams.type_id。通过teams.club_id链接到俱乐部

Contacts

分会可以有一个或多个与之关联的联系人。通过contacts.club_id链接到俱乐部

Types

types.id和types.type_name

我希望能够访问club / view / 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'
    )
);

1 个答案:

答案 0 :(得分:0)

坚持这些惯例会有所帮助。

如果您希望俱乐部属于某个联系人 - 请将其指定为contact_id,并将俱乐部模型中的belongs_to关系设置为“联系”。您需要为Has_Many关系别名赋予该关系不同的别名 - 例如:

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

同样对于团队,使用别名定义带有contact_id的belongs_to,并为联系人定义has_many关系。

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

然后按照正常和&使用debug()查看返回的数组结构