2012-04-26 4 views
0

Так что я попытался это: http://www.yiiframework.com/wiki/285/accessing-data-in-a-join-table-with-the-related-modelsреляционные базы данных в Yii

В основном у меня есть таблица с именем пользователя, который относится к ToolAccess; связанные с первичным ключом на пользователе и поле для userID на ToolAccess. Теперь доступ к инструменту относится к таблице Tool, которая содержит ToolID. Теперь это не работает в Yii, я не могу получить поле toolName из таблицы инструментов, используя Yii. Любые идеи о том, как это сделать в 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

Но в чем проблема, с которой вы сталкиваетесь? – Puigcerber

+0

Я не знаю, как я могу получить значение из столбца имени инструмента –

+0

Хорошо, сначала я не понял. И как связаны инструменты и инструменты? Тололид? – Puigcerber

ответ

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 записей.

+0

Где я могу прочитать дальше? Спасибо! –

+0

@Snow_Mac: Я узнал в основном по этим ссылкам: окончательное руководство по Yii: [Active Record] (http://www.yiiframework.com/doc/guide/1.1/en/database.ar) - [Relational Active Record] (http://www.yiiframework.com/doc/guide/1.1/en/database.arr), пробную версию и ошибку, а также выполнить код с помощью xdebug (хотя это не обязательно для начинающих). Инструмент генератора кода «gii» может генерировать для вас классы Active Record, и если ваша схема базы данных включает в себя внешние ключи (это действительно * необходимо для целей целостности данных), они могут использовать их для автоматического вывода этих отношений. – DCoder

0

Так что, если я понял это правильно, пользователь и инструмент связаны в многие-ко-многим с помощью их первичных ключей.

Таким образом, вы должны определить эти отношения в модели пользователя как:

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

Я надеюсь, что это работает вы.

+0

Доступ пользователя и инструмента связан с полем USERID. Инструмент и пользователь не связаны, но доступ к инструментам и инструментам связан. –

+0

Можете ли вы опубликовать схему своей базы данных? – Puigcerber