繁体   English   中英

Yii中的关系数据库

[英]Relational Databases in Yii

因此,我尝试了以下方法: http : //www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-models

基本上,我有一个名为User的表,它与ToolAccess有关; 通过User上的主键和ToolAccess上的userID字段进行关联。 现在,工具访问与包含工具ID的表“表”相关。 现在这在Yii中不起作用,我似乎无法使用Yii从工具表中获取toolName字段。 关于如何在活动记录上执行此操作的任何想法?

如果有问题,我正在使用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')
    );
}

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

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记录时,应该优先选择急于加载。

因此,如果我对它的理解正确,那么用户和工具就通过其主键以多对多的关系关联起来。

因此,您应该在用户模型中定义此关系,例如:

'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;
}

我希望这个对你有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM