【问题标题】:Please help me with my CakePHP model relationships请帮助我处理我的 CakePHP 模型关系
【发布时间】:2013-03-04 23:29:12
【问题描述】:

我无法理解 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 模型中整齐地访问所有这些内容。

我在这里有什么关联?这是我目前的模型类中的内容。

App/Model/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'
    )
);

App/Model/Team.php

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

App/Model/Contact.php

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

App/Model/Type.php

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

【问题讨论】:

    标签: cakephp cakephp-2.3


    【解决方案1】:

    遵守惯例会有所帮助。

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

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

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

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

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

    【讨论】:

    • 设置递归是我的问题。我之前并没有真正了解这方面。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2019-01-10
    • 2023-03-22
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多