给 Yii2 的 ActiveRecord 添加一个 FindCountTrait 特性

技巧库 · forecho · 于 4年前 发布 · 3515 次阅读

需求

有时候只想查询一个数据是否存在,发现 Yii2 只能这样写:User::find()->where([])->count() 。有点长不喜欢,为什么 有 findOnefindAll 但是却没有 findCount 呢?自己实现一个吧。

Coding

为了解耦方便,我们单独写一个 FindCountTrait 特性,新建一个文件 common\behaviors\FindCountTrait.php (路径你随便改) 代码如下:

<?php

/**
 * author     : forecho <caizhenghai@gmail.com>
 * createTime : 2016/3/24 17:47
 * description:
 */

namespace common\behaviors;

trait FindCountTrait
{
    // 返回数量
    public static function findCount($condition, $q = '*')
    {
        return static::findByCondition($condition)->count($q);
    }

}

使用

如果你想在 Topic model 使用,方法很简单,使用 use 就可以了,示例如下:

<?php
namespace common\models;

use common\behaviors\FindCountTrait;
use Yii;

class Topic extends \yii\db\ActiveRecord
{
    use FindCountTrait;
    
    // .....
}

然后你就可以直接用了:

Topic::findCount([]);

如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的教程。

共收到 1 条回复 Trait Yii2增强
forecho#14年前 0 个赞

同样的方法,我们可以创建一个 FindSumTrait

<?php
namespace common\behaviors;

trait FindSumTrait
{
    // 返回统计
    public static function findSum($condition, $q)
    {
        return static::findByCondition($condition)->sum($q);
    }

}
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册