Ответы пользователя по тегу Sphinx
  • Подобрать архитектуру распределённого Yii-приложения?

    XAKEPEHOK
    @XAKEPEHOK
    У меня похожая ситуация. Разрабатываю SaaS приложение, где много пользователей, при этом каждый сам себе король, у каждого своя нумерация (id) и т.д. и т.п. Тоже думал про несколько баз, но в результате решил использовать одну базу

    В БД к таблицам добавляю поля (int) personalID и projectID, а дальше наследуюсь вот от этого класса
    abstract class PersonalActiveRecord extends CActiveRecord
    {
      public $usePersonalID = true; // Использовать ли персональную нумерацию
      public $personalID = null;
      public $projectID = null;
    
      protected function personalIdExpression(){
        $sql =
          'COALESCE((SELECT personalID FROM
            (SELECT (MAX(personalID)+1) as personalID FROM '.$this->tableName().' WHERE projectID = '.$this->projectID.')
          as personalID ),1)';
        return new CDbExpression($sql);
      }
    
      protected function beforeSave(){
        if (!parent::beforeSave()) return false;
          if ($this->isNewRecord) {
            $this->projectID = (int)Y::param('projectID');
            if ($this->usePersonalID)
              if ($this->personalID===null) $this->personalID = $this->personalIdExpression();
          }
        return true;
      }
    
      public function defaultScope() {
        return array(
          'condition'=>"projectID='".(int)Y::param('projectID')."'",
        );
      }
    
    }
    
    Ответ написан
    Комментировать