在yii2的where条件中使用字段作为递归函数

fhity93d  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(126)

我想将date1的内容发送到**where()**条件中的exp函数并返回结果。

    • 注:**实际上我想比较两个日期,我需要更改其中一个日期以进行分解

下面是我的代码:

function exp($date){
            $date = explode('/', $date);
            $Y = $date[0];
            $m = $date[1];
            $d = $date[2];

            return $Y;
        }

$promise = new ActiveDataProvider([
            'query' => Post::find()
            ->where('status = "show"')
            ->andWhere(['<=', exp('date1'), 'date2'])// date1 is: 2018/02/03
            ->orderBy('id'),
            ]);

还有别的办法吗?

n3schb8v

n3schb8v1#

exp是一个PHP函数,在andWhere中,您准备了一个将在SQL服务器上运行的SQL查询。SQL服务器上的SQL解析器无法执行PHP函数。您应该在此处使用MySQL DATE_FORMAT函数:

$promise = new ActiveDataProvider([
      'query' => Post::find()
         ->where('status = "show"')
         ->andWhere(['<=', 'DATE_FORMAT(date1, "%Y")', 'date2'])
      ->orderBy('id'),
   ]);

请更改字段date1date2的名称以使其提供更多信息。例如,order_datedelivery_date等。
如果代码中经常使用status值,则应将其替换为Post类的常量。
如果date2只包含年份值,则最好使用YEAR类型。

相关问题