【问题标题】:Multiple relations in CakePHPCakePHP 中的多重关系
【发布时间】:2012-09-01 10:00:08
【问题描述】:

我正在使用 CakePHP 创建一个锦标赛平台。目前,我创建了以下表格、模型和控制器,它们可以完美运行:锦标赛、用户和团队。

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

然后在锦标赛下使用 View.ctp 时,它应该显示与锦标赛用户相关的 User.Username 和 Team.Username。截至目前,我只设法通过从表中检索到 id。一个 foreach(.. as ..)。我可以在 CakePHP 查询中看到它检索数据,我只是不知道如何打印它。

【问题讨论】:

    标签: cakephp database-relations


    【解决方案1】:

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

    echo $myData['User']['username'];
    echo $myData['Team']['username'];
    

    或者,如果您有多个:

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

    显然,这需要根据您的代码进行调整,但它应该可以帮助您理解这个想法。

    【讨论】:

    • 嗨戴夫,我在使用“用户”或“团队”时得到一个“未定义索引”。我得到的数据来自 Tournamentuser - 而不是用户表 - 它只是身份证。
    • user1654844 - 那么调试您的数据可能是一个好主意,只需按照上述指南根据您实际获得的数据访问数据。
    • 正如 Dave 提到的,我已经在使用 foreach(....),但是当使用 ['User'] 或 ['Team'] 时,我得到了未定义的索引。
    【解决方案2】:

    我想你已经知道了,但是在 CakePHP 中的约定是:

    • 模型必须有单数名称:user/car/image
    • 控制器必须有复数名称:users/cars/images
    • 表格必须有复数名称:users/cars/images

    如果我们需要一个关系:锦标赛用户,我们必须遵循约定(在 CakePHP 2+ 中):

    • 控制器:TournamentsUsersController.php
    • 模型:TournamentsUser.php
    • 表:锦标赛用户

    如果在建立关系之前遵循所有上述约定,则锦标赛用户必须定义​​两个表之间的关系。

    您可以在此处找到有关如何执行此操作的更多详细信息:http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

    如果到目前为止一切正常,您现在可以查询 TournamentsUser 模型。

    假设你在 TournamentsUsersController.php 控制器中:

    $data = $this->TournamentsUser->find('all');
    

    您现在可以使用以下命令查看 $data 包含的内容:

    debug($data);
    

    要打印数据,您可以使用 for/foreach 循环:

    $size = count($data);
    for($i=0; $i<$size; ++i) {
       debug($data[$i]);
    }
    

    【讨论】:

    • 嗨 Catalin,我已经设法很好地设置了关系,但是当从“加入”锦标赛 > TournamentUser > 用户的 2 度获取信息时 - 我似乎无法设置它。我可以访问 TournamentUser(其中存储了 user_id) - 但获取用户名更加困难。
    • 是的,正确,但是在插入 $blabla['User']['username'] 时,我得到了用户的“未定义索引”
    • 您可以在这里发布您的代码,或者至少是您遇到问题的部分。您说您无法获取用户名,现在您无法插入用户名。哪一个?你想做什么?
    • (pastebin.com/KK90hB0E)

      , ,

      - 现在正在工作的是 ['User']['username']。
    • 在 foreach 循环中使用 debug();查看 $tournamentuser 是否实际包含 ['User'] 数组。你也不应该有 ['Tournamentuser']。我不知道你是怎么来到这里的,但如果你遵循 CakePHP 约定,你的数据就会在 ['TournamentsUser'] 下。
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多