Relation не по primary key
- greatdane
- Сообщения: 408
- Зарегистрирован: 2010.10.20, 14:05
- Откуда: Электросталь
- Контактная информация:
Relation не по primary key
Как правильно прописать relation (и возможно ли), если в обеих таблицах поля, в которых хранится связь - не primary?
http://yiiframework.ru/doc/cookbook/ru/ ... k.relation
http://yiiframework.ru/doc/cookbook/ru/ ... k.relation
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
Прописывается ровно так же.
Нравится Yii? Давайте сделаем его лучше!.
- greatdane
- Сообщения: 408
- Зарегистрирован: 2010.10.20, 14:05
- Откуда: Электросталь
- Контактная информация:
Re: Relation не по primary key
Я попробовала так же - не работает.
Вот фрагменты моделей:
В контроллере выборка:
Во view пишу
Выводится array(0) { }
Что неправильно?
Вот фрагменты моделей:
Код: Выделить всё
<?php
class Dogs extends CActiveRecord
{
//...
public function relations()
{
return array(
// ... тут еще relations
'showsdog'=>array(self::HAS_MANY, 'DogsShow', 'sh_dog_name_eng'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'dog_id' => 'Dog', // это primary key
// ... тут еще атрибуты ...
'name_eng' => 'Dog Name',
// ... тут еще атрибуты ...
);
}
//...
}
Код: Выделить всё
<?php
class DogsShow extends CActiveRecord
{
//...
public function relations()
{
return array(
'showsdog'=>array(self::BELONGS_TO, 'Dogs', 'name_eng'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'sh_dog_id' => 'Show Dog', // это primary key
//... тут еще атрибуты
'sh_dog_name_eng' => 'Dog Name',
// ... тут еще атрибуты
);
}
//...
}
Код: Выделить всё
$criteria = new CDbCriteria;
$criteria->with = array(
// тут еще with, которые работают нормально
'showsdog',
);
$model = Dogs::model()->findByPk((int)$id,$criteria);
Код: Выделить всё
<?php
var_dump($model->showsdog);
?>
Что неправильно?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
А запрос какой генерируется?
Нравится Yii? Давайте сделаем его лучше!.
- greatdane
- Сообщения: 408
- Зарегистрирован: 2010.10.20, 14:05
- Откуда: Электросталь
- Контактная информация:
Re: Relation не по primary key
Не буду весь огромный запрос приводить, вот важная часть:
Т.е. соотносится все равно с первичным ключом
Код: Выделить всё
LEFT OUTER JOIN
`dogs_show` `showsdog` ON (`showsdog`.`sh_dog_name_eng`=`t`.`dog_id`)
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
InnoDB? Внешние ключи расставлены как надо?
Нравится Yii? Давайте сделаем его лучше!.
- greatdane
- Сообщения: 408
- Зарегистрирован: 2010.10.20, 14:05
- Откуда: Электросталь
- Контактная информация:
Re: Relation не по primary key
Нет, MyISAM.
- greatdane
- Сообщения: 408
- Зарегистрирован: 2010.10.20, 14:05
- Откуда: Электросталь
- Контактная информация:
Re: Relation не по primary key
Спасибо огромное! Работает!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
Оформил рецептом: http://yiiframework.ru/doc/cookbook/ru/ ... k.relation
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Relation не по primary key
Взял на заметку, я делал так http://devkp.ru/post/otnosheniya-svyaz- ... mu-klyuchu
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
Re: Relation не по primary key
Теперь можно решать этот вопрос без костылей. Версия в svn на текущий момент позволяет сделать так:
Код: Выделить всё
'roles'=>array(self::HAS_ONE, 'Role',array('some_field'=>'id'))
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Relation не по primary key
О, круто, твое поведение тоже понимает это ?
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Relation не по primary key
А если ключ составной ?
Re: Relation не по primary key
WithRelatedBehavior в процессе доработки под эту фичу.Ekstazi писал(а):О, круто, твое поведение тоже понимает это ?
Если составной, то FK задается как array('fk_c1'=>'pk_c1','fk_c2'=>'pk_c2');Ekstazi писал(а):А если ключ составной ?
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Relation не по primary key
Ок, спс. Ждем!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
В документации в SVN это описано. С релизом будет на сайте.
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 350
- Зарегистрирован: 2009.09.17, 16:47
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Relation не по primary key
Раз такое дело, а когда можно ждать 1.9? и туда уже будет включен withRelated? ^_^
Предупрежден - значит вооружен.
devKP.ru
devKP.ru
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Relation не по primary key
withRelated ещё нужно немного погонять, так что пока не ясно, будет он в 1.1.9 или нет и в каком виде. Когда ждать не знаю. Фиксов уже прилично накопилось, может и поскорее выпустим.
Нравится Yii? Давайте сделаем его лучше!.
Re: Relation не по primary key
Мне кажется что лучше эта связь указывалась как в Kohana через public function relations(){}.
Меньше было бы телодвижений.
Меньше было бы телодвижений.