本文整理汇总了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));
}
}
示例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;
}
}