1

我无法理解 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

我希望能够访问 clubs/view/x 并显示一个显示以下内容的页面:

  • 俱乐部主要联系人姓名/电子邮件
  • 所有俱乐部联系人
  • 所有俱乐部球队,包括球队主要联系人姓名/电子邮件

TeamsController 的添加/编辑/删除功能运行良好 - 即我可以调用联系人和类型列表并将它们显示在视图表单的选择框中。

不过,我无法从 Club 模型中整齐地访问所有这些内容。

我在这里有什么协会?这是我目前在我的模型课程中所拥有的。

应用程序/模型/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'
    )
);

应用程序/模型/团队.php

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

应用程序/模型/联系人.php

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

应用程序/模型/Type.php

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

1 回答 1

0

遵守约定在这里会有所帮助。

如果您希望俱乐部属于某个联系人 - 给它一个contact_id 并在俱乐部模型中将belongs_to 关系设置为Contact。您需要为该关系赋予与 Has_Many 关系别名不同的别名 - 例如:

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

同样,对于 Teams,为具有别名的领导者定义一个 contains_to 和一个 contact_id,并为联系人定义一个常规的 has_many 关系。

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

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

于 2013-03-05T05:29:20.223 回答