所以我试过这个:http://www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-models
基本上我有一个名为User的表,它与ToolAccess有关;通过User上的主键和ToolAccess上的userID字段进行相关。现在,工具访问与包含ToolID的表工具相关。现在这在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')
);
}
答案 0 :(得分: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
记录,就应该首选加载。
答案 1 :(得分: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;
}
我希望它适合你。