Задать вопрос
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 но возможно уже есть какие нибудь решения для данного типа задач (гугл не помог к сожалению, хотя возможно не так гуглил)?
  • Вопрос задан
  • 557 просмотров
Подписаться 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 например
Ответ написан
qonand
@qonand
Software Engineer
Главный вопрос - зачем? зачем Вы так хотите сделать? что это Вам даст?
Если просто что б было - тогда Вы на пути к созданию говнокода. Если же Вам например нужно сделать редактирования данных параметров тогда лучше использовать динамическую модель для этих целей
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы