Задать вопрос

Какой патерн применить для взаимодействия из одного места взависимости от конфига (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 просмотров
Подписаться 5 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 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;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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