множественное отношение в AR

Привет.

Столкнулся с неведовым :)

Создал модель User, в ней отношение:

'professional' => array(self::HAS_ONE, 'Professional', 'uid'),

и Professional с отношением:

'proftypes'=>array(self::MANY_MANY, 'ProfType', 'profPropTypes(uid, user_type_id)'),

пытаюсь получить proftypes для текущего юзверя через

$user = User::model()->with('professional.proftypes')->findbyPk($id);

ну и потов ессно пытаюсь достучаться $user->professional->proftypes но этот вызов возвращает пустой массив

вот, что дает var_dump($user->professional):

[tt]        ["_attributes":"CActiveRecord":private]=>

        array(3) {

          ["id"]=>

          string(1) "8"

          ["name"]=>

          string(8) “Building”

          ["desc"]=>

          NULL

        }

[/tt]

,в котором

[tt]  ["_related":"CActiveRecord":private]=>

  array(1) {

    ["proftypes"]=>

    array(2) {

      [0]=>

      object(ProfType)#161 (10) {

[/tt]

как получить то значения?

Всё вроде выглядит верно, моя единственная догадка: возможно нужно оформить with так: with(‘professional’, ‘professional.proftypes’). Сам проверять не пробовал :-X

Quote

Всё вроде выглядит верно, моя единственная догадка: возможно нужно оформить with так: with('professional', 'professional.proftypes'). Сам проверять не пробовал :-X

неа :(

Проверь, является ли uid в таблице Professional первичным ключем. Либо это foreign key доставшийся от таблицы User. Если второе, то ничего удивительного в том, что ничего не работает нет.

Quote

Проверь, является ли uid в таблице Professional первичным ключем. Либо это foreign key доставшийся от таблицы User. Если второе, то ничего удивительного в том, что ничего не работает нет.

и первое и второе, дело в том, что данные в вардампе есть: [tt]        array(3) {

          ["id"]=>

          string(1) "8"

          ["name"]=>

          string(8) “Building”

          ["desc"]=>

          NULL

        }[/tt], но я не могу понять, как к ним обратиться

Точно это возвращает пустой массив?. Конструкция $user->professional->proftypes должна в вашем случае возвращать коллекцию объектов. var_dump косвенно об этом говорит (лучше кстати CVarDumper::dump())



  array(1) {


    ["proftypes"]=>


    array(2)


Как раз 2 объекта.

Смотрите, что скажет CVarDumper::dump($user->professional->proftypes);

Quote

  array(1) {

    ["proftypes"]=>

    array(2)

Как раз 2 объекта.

Смотрите, что скажет CVarDumper::dump($user->professional->proftypes);

то же, что и var_dump - array(0)

http://kofe.in/dump.html

вот дампы $user->professional

Quote

http://kofe.in/dump.html

вот дампы $user->professional

перезалил, искать значение по слову Building

Все понятно. Убирайте свойство public $proftypes из модели Professional. Зачем оно там вообще? Оно перекрывает доступ к идентификатору proftypes  описанному в relations() той же модели, т.к. имеет более высокий приоритет.

Quote

Все понятно. Убирайте свойство public $proftypes из модели Professional. Зачем оно там вообще? Оно перекрывает доступ к идентификатору proftypes  описанному в relations() той же модели, т.к. имеет более высокий приоритет.

мать перемать, спасибо большое, прямо 1й строчкой %)

сейчас по логу свн посмотрю, кто сделал, буду сильно ругаться