create() public static method

The properties being copies are the ones to be used by query builders.
public static create ( Query $from ) : Query
$from Query the source query object
return Query the new Query object
Example #1
0
 /**
  * @inheritdoc
  */
 public function prepare($builder)
 {
     // NOTE: because the same ActiveQuery may be used to build different SQL statements
     // (e.g. by ActiveDataProvider, one for count query, the other for row data query,
     // it is important to make sure the same ActiveQuery can be used to build SQL statements
     // multiple times.
     if (!empty($this->joinWith)) {
         $this->buildJoinWith();
         $this->joinWith = null;
         // clean it up to avoid issue https://github.com/yiisoft/yii2/issues/2687
     }
     if (empty($this->from)) {
         /* @var $modelClass ActiveRecord */
         $modelClass = $this->modelClass;
         $tableName = $modelClass::tableName();
         $this->from = [$tableName];
     }
     if (empty($this->select) && !empty($this->join)) {
         list(, $alias) = $this->getQueryTableName($this);
         $this->select = ["{$alias}.*"];
     }
     if ($this->primaryModel === null) {
         // eager loading
         $query = Query::create($this);
     } else {
         // lazy loading of a relation
         $where = $this->where;
         if ($this->via instanceof self) {
             // via junction table
             $viaModels = $this->via->findJunctionRows([$this->primaryModel]);
             $this->filterByModels($viaModels);
         } elseif (is_array($this->via)) {
             // via relation
             /* @var $viaQuery ActiveQuery */
             list($viaName, $viaQuery) = $this->via;
             if ($viaQuery->multiple) {
                 $viaModels = $viaQuery->all();
                 $this->primaryModel->populateRelation($viaName, $viaModels);
             } else {
                 $model = $viaQuery->one();
                 $this->primaryModel->populateRelation($viaName, $model);
                 $viaModels = $model === null ? [] : [$model];
             }
             $this->filterByModels($viaModels);
         } else {
             $this->filterByModels([$this->primaryModel]);
         }
         $this->_viaModels = !empty($viaModels) ? $viaModels : [];
         $query = Query::create($this);
         $this->where = $where;
     }
     if (!empty($this->on)) {
         $query->andWhere($this->on);
     }
     return $query;
 }
Example #2
0
 public function relations($model, $attribute)
 {
     $relation = $model->fileRelation($attribute);
     $handlerRelationQuery = $model->fileOption($attribute, 'relationQuery');
     $query = null;
     if ($handlerRelationQuery) {
         $query = Query::create($handlerRelationQuery($model->find()));
     }
     $query = $query ?: new Query();
     return $query->from($relation->via->from[0])->andWhere([key($relation->via->link) => $model->getPrimaryKey()])->indexBy(current($relation->link))->all();
 }