Как построить отношения с несколькими идентификаторами, разделенными запятой в Yii - PullRequest
1 голос
/ 27 июня 2011

Я создавал форму. Certian поля формы используют флажок и могут возвращать несколько вариантов, и я должен сохранить все эти идентификаторы в одном поле, разделенном запятой или точкой с запятой.

Теперь я обращаюсь к тому, как мне построить связь с этой записью в Yii Framework. Обычно мы используем

'groupName' => array(self::BELONGS_TO, 'Lookup', 'group'),
'p_cpu' => array(self::BELONGS_TO, 'Product', 'cpu'),

Но как мне это сделать следующим образом

'p_additionalSoftwares' => array(self::BELONGS_TO, 'Product', 'additionalSoftwares'),

Когда дополнительные программные продукты содержат что-то вроде 2,8

1 Ответ

0 голосов
/ 28 июля 2011

Поскольку это не настоящее отношение BELONGS_TO с внешним ключом, вы не можете использовать встроенные функции Yii.Вы можете написать пользовательское отношение для этого случая на основе CBaseActiveRelation или CActiveRelation, но у меня нет такого опыта, но это может быть самым чистым решением.

Другой вариант - переписать обработчик get для вашего атрибута,как *

public function getP_additionalSoftwares(){
  //Use value from database in attributes and split into array with primary keys
  $pks = explode(",",$this->attributes['p_additionalSoftwares']);
  //Query database
  $models = $this->findByPks($pks);
  return $models;
}

По вашему мнению:

$model->p_additionalSoftwares

Должен возвращать массив моделей, например отношение.

Примечание: Этоможет повлиять на производительность, поскольку вы можете получить большое количество подзапросов к базе данных, так как все записи загружаются с отложенной загрузкой.

** код не проверен *

...