當前位置: 首頁>>代碼示例>>PHP>>正文


PHP ActiveQuery::addSelect方法代碼示例

本文整理匯總了PHP中yii\db\ActiveQuery::addSelect方法的典型用法代碼示例。如果您正苦於以下問題:PHP ActiveQuery::addSelect方法的具體用法?PHP ActiveQuery::addSelect怎麽用?PHP ActiveQuery::addSelect使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在yii\db\ActiveQuery的用法示例。


在下文中一共展示了ActiveQuery::addSelect方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。

示例1: applyFilterForRelatedData

 /**
  * Применение фильтров по связанным данным модели.
  * Поскольку модель имеет 2 связи многие ко многим - необходимо иметь возможность осуществлять строгую
  * фильтрацию по обеим связям. На чистом AR это сделать крайне проблематично, в силу этого часть запроса
  * сформирована вручную.
  *
  * @param ActiveQuery $query
  * @param array $tagIds
  * @param array $authorIds
  */
 public static function applyFilterForRelatedData(ActiveQuery $query, array $tagIds = [], array $authorIds = [])
 {
     if ($tagIds && $authorIds) {
         // Строгая фильтрация по обеим полям
         // Произведение фильтруемого количества меток на количество авторов - даст требуемое значение
         // для фильтрации по обеим критериям
         $cnt = count($tagIds) * count($authorIds);
         $query->addSelect([Book::tableName() . '.*', 'COUNT(book_at_tag.book_id) AS cntTag', 'COUNT(book_at_author.book_id) AS cntAuthor'])->leftJoin('book_at_tag', '`book`.`id` = `book_at_tag`.`book_id`')->leftJoin('book_at_author', '`book`.`id` = `book_at_author`.`book_id` ')->andFilterWhere(['tag_id' => array_values($tagIds), 'author_id' => array_values($authorIds)])->groupBy(['book_at_tag.book_id', 'book_at_author.book_id'])->having('cntTag = ' . $cnt)->andHaving('cntAuthor = ' . $cnt);
     } elseif ($tagIds || $authorIds) {
         if ($tagIds) {
             // Применение фильтра по наличию всех меток в $tagIds для объекта $query.
             $term = 'tag';
             $list = $tagIds;
         } else {
             // Применение фильтра по наличию всех авторов в $authorIds для объекта $query.
             $term = 'author';
             $list = $authorIds;
         }
         $query->addSelect([Book::tableName() . '.*', 'COUNT(' . Book::tableName() . '.id) AS cnt'])->joinWith($term . 's')->andFilterWhere([$term . '_id' => array_values($list)])->groupBy('book_id')->having('cnt = ' . count($list));
     }
 }
開發者ID:Rey8d01,項目名稱:book-catalog,代碼行數:31,代碼來源:Book.php

示例2: prepareQuery

 /**
  *
  * Apply current condition will be applied to a query using this function.
  *
  * @param \yii\db\ActiveQuery $query The query object which current condition must be applied to
  */
 public function prepareQuery($query)
 {
     $field = $this->functionObj->prepareSql();
     if (!$field) {
         return NULL;
     }
     switch ($this->operation) {
         case 'select':
             // Here I need to add property to the target class accroding to alias
             $query->addSelect([$this->alias => $field]);
             break;
         case 'where':
             $query->andWhere($field);
             break;
         case 'group':
             $query->addGroupBy($field);
             break;
         case 'order':
             $query->addOrderBy($field);
             break;
         case 'order_inv':
             $query->addOrderBy([$field => SORT_DESC]);
             break;
     }
 }
開發者ID:VEKsoftware,項目名稱:yii2-report-manager,代碼行數:31,代碼來源:ReportsConditions.php


注:本文中的yii\db\ActiveQuery::addSelect方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。