Задать вопрос
Avillions
@Avillions
PHP Developer at Genesis

Как в yii2 при помощи ActiveRecord организовать динамические параметры продукта?

Доброго времени суток, есть 2 таблицы product (id, name, type, create_at, etc...) и product_params (id, product_id, name, value).

Суть в том что в таблице product хранится общая информация о продуктах, а в таблице product_params хранятся специфические параметры в зависимости от типа продукта. Хотелось бы организовать работу с product_params как с объектом ActiveRecord а не как с массивом этих объектов.

То есть что-то вроде такого:
$productParams = ProductParams::findOne(['product_id' => 1]);
$productParams->weight = 10;
$productParams->color = 'blue';
$productParams->size = 200;
$productParams->save();


И при сохранении получались такие записи в таблице product_params:
id | product_id       | name   | value 
1  | 1                | weight | 10
2  | 1                | color  | blue
3  | 1                | size   | 200


Я понимаю что это противоречит идеологии ActiveRecord но возможно уже есть какие нибудь решения для данного типа задач (гугл не помог к сожалению, хотя возможно не так гуглил)?
  • Вопрос задан
  • 560 просмотров
Подписаться 1 Оценить 1 комментарий
Ответ пользователя Максим Тимофеев К ответам на вопрос (2)
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Если я правильно Вас понял, то видимо так:
public function getProductParams(){
// тут связь has many
}

public function getParam($name=color){
return $this->getProductParams()->andWhere(['name'=>$name])->one();
//или сразу value а не объект
// return $this->getProductParams()->andWhere(['name'=>$name])->one()->value;
}


как вариант можно уже в php моделе разбить массив объектов из getProductParams() и записать в публичную переменую, использовав afterFind например
Ответ написан