CakePHP中的多重关系

CakePHP中的多重关系,cakephp,database-relations,Cakephp,Database Relations,我正在用CakePHP创建一个锦标赛平台。目前,我已经创建了以下表格、模型和控制器,它们工作得非常好:锦标赛、用户和团队 我已经创建了一个“Tournamentuser”表、控制器和模型,其中存储了锦标赛id、用户id和团队id 然后,在Tournaments下使用View.ctp时,它应该显示与Tournamentuser相关的User.Username和Team.Username。到目前为止,我只能通过从表中检索id。foreach(…作为…)。我可以在CakePHP查询中看到它检索数据,我

我正在用CakePHP创建一个锦标赛平台。目前,我已经创建了以下表格、模型和控制器,它们工作得非常好:锦标赛、用户和团队

我已经创建了一个“Tournamentuser”表、控制器和模型,其中存储了锦标赛id、用户id和团队id


然后,在Tournaments下使用View.ctp时,它应该显示与Tournamentuser相关的User.Username和Team.Username。到目前为止,我只能通过从表中检索id。foreach(…作为…)。我可以在CakePHP查询中看到它检索数据,我只是不知道如何打印它。

如果您正在获取数据,但只需要访问值,您可以使用普通的PHP数组功能:

echo $myData['User']['username'];
echo $myData['Team']['username'];
或者,如果您有多个:

foreach($myData as $data) {
    echo $data['User']['username'];
    echo $data['Team']['username'];
}

显然,这需要根据您的代码进行调整,但它应该有助于您了解这一点。

我想您已经知道这一点,但在CakePHP中,约定是:

  • 型号必须具有单数名称:用户/汽车/图像
  • 控制器必须具有复数名称:用户/车辆/图像
  • 表必须有复数名称:用户/汽车/图像
例如,如果我们需要一个关系:锦标赛用户,我们必须遵循约定(在CakePHP 2+中):

  • 控制器:TournamentsUsersController.php
  • 模型:TournamentsUser.php
  • 表:锦标赛\用户
如果在建立关系之前遵循了上述所有约定,则必须定义两个表之间的关系

在这里,您可以找到有关如何执行此操作的更多详细信息:

如果到目前为止所有操作都正确,那么现在可以查询TournamentsUser模型

假设您在TournamentsUsersController.php控制器中: 现在,您可以使用以下命令查看$data包含的内容: 要打印数据,可以使用For/foreach循环:
$size=计数($data);

对于($i=0;$iHi-Dave,我得到了一个“未定义的索引”当使用“用户”或“团队”时,我获取的数据来自Tournamentuser,而不是用户表,并且它只是ID的user1654844,那么调试您的数据可能是一个好主意,只需遵循上面的指导原则,根据您实际获取的数据访问数据。正如Dave提到的,我已经在使用foreach(…),但是当使用['User']或['Team']时,我得到了未定义的索引。嗨,Catalin,我已经成功地建立了良好的关系,但是当从第二级“加入”锦标赛>锦标赛用户>用户获取信息时,我似乎无法进行设置。我可以找到锦标赛用户(用户的id在那里)是存储的-但是获取用户名更困难。是的,正确,但是当插入$blabla['User']['Username']时,我得到了“未定义的索引”对于用户,您可以在这里发布您的代码或至少是您遇到问题的部分。您说您无法获取用户名,现在您在插入用户名时遇到问题。是哪一个?您想做什么?(),

-是['User']['username']这正在起作用。在foreach循环中,使用debug();查看$tournamentuser是否实际包含['User']数组。此外,您不应该有['tournamentuser']。我不知道您是如何来到这里的,但如果您遵循CakePHP约定,您的数据将位于['TournamentsUser']下。
$data = $this->TournamentsUser->find('all');
debug($data);
$size = count($data);
for($i=0; $i<$size; ++i) {
   debug($data[$i]);
}