Какой патерн применить для взаимодействия из одного места взависимости от конфига (YII2)?

Подскажите какой патерн применить. Задача такая. Есть сущьность Orders. Но заказы могут быть как на продажу так и на покупку. Эти свойства хронятся в разных таблицах, всего три таблицы Заказы, данные покупки, данные продажы. Получается, что когда мы хотим отобразить наш заказ мы создаем модель order а потом взависимости от типа подтягиваем данные. Таким образом мы можем создать универсальный способ, отоброжать данные во вьюхе. Где взависимости от типа мы используем тот или иной метод, обращаясь к той или иной таблице....

сейчас это выглядит так
class Order extends ActiveRecord {

    const TYPE_SELL = 1;
    const TYPE_BUY = 2;

    private $_params = null;

    private function setParams() {

        $this->_params = array();

        if ($this->type == self::TYPE_BUY) {
            //$Source = Order_requests::find()->where( ['id' => $this->source_id] )->one();
        } else {
            $Source = Certificate::find()->where( ['id' => $this->source_id] )->one();            
        }
        foreach ($Source as $key => $val) {
                $this->_params[$key] = $val; //get data from certificate model by source_id
            }
    }

    function getParam($key) {
        if (is_null($this->_params)) {
            $this->setParams();
        }

        return isset($this->_params[$key]) ? $this->_params[$key] : null;
    }

    /**
     * @inheritdoc
     */
    public static function tableName() {
        return '{{%orders}}';
    }


создаем модель, потом взависимости от полученых параметров, подгружаем ту или иные данные. Как лучше сделать, какой паттерн применим.
  • Вопрос задан
  • 395 просмотров
Пригласить эксперта
Ответы на вопрос 2
Demetriy
@Demetriy
веб и мобильная разработка
В ваш код сильно не вникал, но почитайте эту статью по-поводу разных таблиц для идентичных, чуть отличающихся моделей, возможно вы изобретаете велосипед.
Ответ написан
Комментировать
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
делать надо так:
3 модели 3 таблицы
модель заказа с параметром type и общими данными
модель для типа 1
модель для типа 2

в моделе заказа связь зависимая от параметра type, например:
publiс function getData(){
switch($this->type){
case 1:
$data = $this->hasMany(Model1::classname(),['order_id'=>'id']);
break;
case 2:
$data = $this->hasMany(Model2::classname(),['order_id'=>'id']);
break;
default:
$data = null;
}
return $data;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы