예제 #1
0
 /**
  * Return list of relations for current model
  * @return array
  */
 public static function getRelations()
 {
     $old = parent::getRelations();
     $old['parent'] = [DbRelations::BELONGS_TO, '\\mpf\\modules\\forum\\models\\ForumReplyThird', 'reply_id'];
     $old['replies'] = [DbRelations::HAS_MANY, '\\mpf\\modules\\forum\\models\\ForumReplyFifth', 'reply_id'];
     $old['myVote'] = DbRelation::hasOne(ForumReplyVote::className())->columnsEqual('id', 'reply_id')->hasValue('level', 4)->hasValue('user_id', WebApp::get()->user()->isConnected() ? WebApp::get()->user()->id : 0);
     return $old;
 }
예제 #2
0
 protected function _columnsForRelation(DbRelation $relation, PDOConnection $connection, $relationName)
 {
     $sqlColumns = $connection->getTableColumns($relation->getTableName());
     $columnAlias = str_replace('.', '_', str_replace('_', '__', $relationName));
     $columns = [];
     foreach ($sqlColumns as $column) {
         $columns[] = "`{$relation->getTableAlias()}`.`{$column['Field']}` as ___{$columnAlias}___{$column['Field']}";
     }
     return $columns;
 }
예제 #3
0
 /**
  * @param $path
  * @param DbRelation $parentRelation
  * @return DbRelation
  */
 protected function initSubRelation($path, DbRelation $parentRelation)
 {
     $modelClass = $parentRelation->model;
     $relations = $modelClass::getRelations();
     $name = explode('.', $path);
     $name = $name[count($name) - 1];
     $relation = $relations[$name];
     if (is_array($relation)) {
         $details = $relation;
         $relationClass = $details[1];
         switch ($details[0]) {
             case DbRelations::BELONGS_TO:
                 $relation = DbRelation::belongsTo($details[1], $details[2]);
                 break;
             case DbRelations::HAS_ONE:
                 $relation = DbRelation::hasOne($details[1])->columnsEqual($modelClass::getDb()->getTablePk($modelClass::getTableName()), $details[2]);
                 break;
             case DbRelations::HAS_MANY:
                 $relation = DbRelation::hasMany($details[1])->columnsEqual($modelClass::getDb()->getTablePk($modelClass::getTableName()), $details[2]);
                 break;
             case DbRelations::MANY_TO_MANY:
                 //table_name(model_column, relation_column)
                 list($tableName, $columns) = explode("(", $details[2]);
                 $columns = explode(',', substr($columns, 0, strlen($columns) - 1));
                 $relation = DbRelation::manyToMany($details[1])->join([$tableName => $name . '_' . $tableName], [$modelClass::getDb()->getTablePk($modelClass::getTableName()) => trim($columns[0])])->columnsEqual($name . '_' . $tableName . '.' . trim($columns[1]), $relationClass::getDb()->getTablePk($relationClass::getTableName()));
                 break;
             default:
                 trigger_error("Invalid relation type {$details[0]}!");
         }
     }
     return $relation;
 }
예제 #4
0
 /**
  * Return list of relations for current model
  * @return array
  */
 public static function getRelations()
 {
     return ['author' => [DbRelations::BELONGS_TO, '\\app\\models\\User', 'user_id'], 'thread' => [DbRelations::BELONGS_TO, '\\mpf\\modules\\forum\\models\\ForumThread', 'thread_id'], 'sectionAuthor' => DbRelation::belongsTo(ForumUser2Section::className(), 'user_id')->hasAttributeValue('section_id', 'currentSection'), 'editor' => [DbRelations::BELONGS_TO, '\\app\\models\\User', 'edit_user_id'], 'deletedBy' => [DbRelations::BELONGS_TO, '\\app\\models\\User', 'deleted_user_id'], 'authorGroup' => [DbRelations::BELONGS_TO, '\\mpf\\modules\\forum\\models\\ForumUserGroup', 'user_group_id'], 'replies' => [DbRelations::HAS_MANY, '\\mpf\\modules\\forum\\models\\ForumReplySecond', 'reply_id'], 'myVote' => DbRelation::hasOne(ForumReplyVote::className())->columnsEqual('id', 'reply_id')->hasValue('level', 1)->hasValue('user_id', WebApp::get()->user()->isConnected() ? WebApp::get()->user()->id : 0)];
 }