Yii2:SQL查询中的函数

时间:2018-10-02 16:39:10

标签: postgresql yii2

我需要使用Yii2框架从名为 person 的表中选择21岁以下的人。

人=(id,生日)

public static function findByBirthday($idper) {
    $query = Persons::find()
        ->select([
            Persons::tableName().".[[id]]", 
            Persons::tableName().".[[birthday]]"
        ])
        ->where([
            '<=',
            'select age(birthday, NOW())',
            21
        ])

    return $query->asArray()->all();
}

2 个答案:

答案 0 :(得分:1)

如果生日是有效的DATE类型

public static function findByBirthday($idper) {
    $query = Persons::find()
        ->select([
            Persons::tableName().".[[id]]", 
            Persons::tableName().".[[birthday]]"
        ])
        ->where([
            '<=',
            'EXTRACE(year from age(birthday))',
            21
        ])

    return $query->asArray()->all();
}

  ->where(   'EXTRACE(year from age(birthday))   <= 21')

答案 1 :(得分:1)

您可以将birthday与21年前的日期进行比较-对于年龄计算,它应该比表达式更好地重用索引,并且结果将是相同的。

public static function findByBirthday($idper) {
    $query = Persons::find()
        ->select([
            Persons::tableName() . ".[[id]]",
            Persons::tableName() . ".[[birthday]]",
        ])
        ->where([
            '>=',
            'birthday',
            new Expression('date :date', [
                ':date' => date('Y-m-d', strtotime('-21 years')),
            ]),
        ]);

    return $query->asArray()->all();
}