0

だから私はこれを試しました: http://www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-models

基本的に、ToolAccess に関連する User というテーブルがあります。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 に答える