0

所以我试过这个:http ://www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-models

基本上我有一个名为 User 的表,它与 ToolAccess 相关;通过 User 上的主键和 ToolAccess 上的 userID 字段相关。现在工具访问与包含 ToolID 的表 Tool 相关。现在这在 Yii 中不起作用,我似乎无法使用 Yii 从工具表中删除 toolName 字段。关于如何在 Active Record 上执行此操作的任何想法?

如果这很重要,我正在使用 giix。

关系代码:

public function relations() {
    return array(
        'usergalleries' => array(self::HAS_MANY, 'Usergallery', 'userid'),
        'userinroles' => array(self::HAS_MANY, 'Userinroles', 'userid'),
        'userfailedlogin' => array(self::HAS_MANY, 'Userfailedlogin','userid'),
        // table name, relation, class name, relation key
        'toolaccess' =>array(self::HAS_MANY, 'Toolaccess','userid'),
        'tool' =>array(self::HAS_MANY, 'Tool','toolid')
    );
}
4

2 回答 2

1

我假设您的架构看起来像这样:

User table             tool_access table          Tool table

id | other columns     userid | toolid            id | name | other columns

在这种情况下,User模型应该有这样的关系(请注意,在这种情况下,工具将按名称排序):

public function relations() {
    return array(
        // other relations here...
        'tools' =>array(self::MANY_MANY, 'Tool', 'tool_access(userid,toolid)',
          'order' => 'tools.name',
        ),
    );
}

读取工具的代码应如下所示:

$user = User::model()->with('tools')->findByPk($id);
foreach($user->tools as $tool) {
    echo $tool->name;
}

我在这里使用了急切加载,tools主要是因为个人喜好,在这种情况下使用延迟加载应该也能正常工作。但是,当您一次处理多条记录时,应该首选预先加载User

于 2012-04-27T04:27:22.157 回答
0

因此,如果我理解正确,用户和工具通过它们的主键以多对多的关系相关。

因此,您应该在 User 模型中定义这种关系,例如:

'tools' => array(self::MANY_MANY, 'Tool', 'tool_access(userid, toolid)', 'index' => 'id'),

这样就可以在获取用户模型后访问工具的名称

$user = User::model->findByPk($id);
$tools = $user->tools;
foreach ($tools as $tool)
{
    echo $tool->name;
}

我希望这个对你有用。

于 2012-04-26T23:52:16.630 回答