使用cakephp3的ORM的复杂子查询

使用cakephp3的ORM的复杂子查询,orm,cakephp-3.0,Orm,Cakephp 3.0,我有一个相当复杂的幻想?查询,它在纯sql中工作,但我需要将其转换为与CakePHP3.0的orm一起使用 以下是查询: 选择用户id,countid/期间\u diffdate\u formatnow,“%Y%m”, 发送日期,发票中的平均值为%Y%m 发送到哪里!='0000-00-00“按用户id分组” 这就是我所尝试的: $monthly = $this->find() ->select(function ($query) { return [ 'us

我有一个相当复杂的幻想?查询,它在纯sql中工作,但我需要将其转换为与CakePHP3.0的orm一起使用

以下是查询:

选择用户id,countid/期间\u diffdate\u formatnow,“%Y%m”, 发送日期,发票中的平均值为%Y%m 发送到哪里!='0000-00-00“按用户id分组” 这就是我所尝试的:

$monthly = $this->find()
  ->select(function ($query) {
    return [
      'user_id',
      'average' => $query->func()->extract(
        'COUNT(Invoices.id)/PERIOD_DIFF(date_format(now(), "%Y%m"),
         date_format(Invoices.sent, "%Y%m"))'
      )
    ];
  })
  ->where([
    "Invoices.sent !=" => "0000-00-00",
  ])
  ->group('user_id');
问题是,我不确定我真正需要的提取方法是否可用,但我使用的是3.0


这是正确的方法吗?我能让它以某种方式与3.0兼容吗?或者我还能使用其他东西吗?

升级到3.1是不可能的吗?不兼容性非常小…您的原始SQL查询不使用EXTRACT,所以为什么要尝试在查询生成器中使用EXTRACT?我无法升级到3.1,因为我以前遇到过问题]。无论如何,我已经设法使它与一个原始表达式一起工作:$query->newExpr->add'..。。升级到3.1是不可能的吗?不兼容性非常小…您的原始SQL查询不使用EXTRACT,所以为什么要尝试在查询生成器中使用EXTRACT?我无法升级到3.1,因为我以前遇到过问题]。无论如何,我已经设法使它与一个原始表达式一起工作:$query->newExpr->add'。