查询匹配()导致重复的行,而distinct()无效

问题描述 投票:0回答:1

[我正在尝试通过关联的表格发票上的字段过滤一个表格付款。在查询对象上使用功能match()可以正确过滤,但会导致重复行。似乎解决方案正在使用distinct(),但是调用distinct(Payments.id)会导致无效查询。我正在执行控制器操作中的以下操作。

      $conditions = [
        'Payments.is_deleted =' => false
      ];
      $args = [
        'conditions' => $conditions,
        'contain' => ['Invoices', 'Invoices.Clients'],
      ];
      $payments = $this->Payments->find('all', $args);
      if($issuer) {
        // This causes duplicate rows
        $payments->matching('Invoices', function ($q) use ($issuer) {
          return $q->where(['Invoices.issuer_id' => $issuer['id']]);
        });
        // $payments->distinct('Payments.id'); // Causes a mysql error
      }

我是否认为我需要的是distinct()是正确的,如果有的话,使它正常工作缺少什么?

取消注释以上行时出现以下mysql错误:

错误:SQLSTATE [42000]:语法错误或访问冲突:1055 SELECT列表的表达式#8不在GROUP BY子句中,并且包含未聚合的列'InvoicesPayments.id',该列在功能上不依赖于GROUP BY子句中的列;这与sql_mode = only_full_group_by

不兼容

完整查询:

选择[SELECT PAYMENTS.ID为PAYMENTS__ID,PAYMENTS。创建为PAYMENTS__CREATED,PAYMENTS.MODIFIED为PAYMENTS__MODIFIED,PAYMENTS.DATE_registered为PAYMENTS__DATE_REGISTERED,PAYMENTS.USER_ID为PAYMENTS__USER_ID,PAYMENTS.AMOUNT为PAYMENTS__AMOUNT ,PAYMENTS.IS_DELETED AS PAYMENTS__IS_DELETED,INVOICESPAYMENTS.ID AS INVOICESPAYMENTS__ID,INVOICESPAYMENTS.INVOICE_ID AS INVOICESPAYMENTS__INVOICE_ID,INVOICESPAYMENTS.PAYMENT_ID AS INVOICESPAYMENTS__PAYMENT_ID,INVOICESPAYMENTS.PART_AMOUNT AS INVOICESPAYMENTS__PART_AMOUNT,INVOICES.ID 。创建为INVOICES__ID,INVOICES.IS_PAID为INVOICES__CREATED,INVOICES.IS_DELETED为INVOICES__MODIFIED,INVOICES.CLIENT_ID为INVOICES__IS_PAID,INVOICES.ISSUER_ID为INVOICES__IS_DELETED,INVOICES.NUMBER AS INVOICES__CLIENT_ID,INVOICES.SUBTOTAL AS INVOICES__ISSUER_ID,INVOICES.TOTAL AS INVOICES__NUMBER,INVOICES.DATE_located AS INVOICES__SUBTOTAL,INVOICES.CURRENCY AS INVOICES__TOTAL,INVOICES.RECEIVER_NAME AS INVOICES__DATE_REGISTERED,INVOICES.RECEIVER_RFC AS [ C0],INVOICES.EMAIL_SENDER AS INVOICES__CURRENCY,INVOICES.PDF_PATH AS INVOICES__RECEIVER_NAME,来自PAYMENTS.ID =(INVOICESPAYMENTS.PAYMENT_ID)的PAYMENTS PAYMENTS内联INVOICES_PAYMENTS INVOICES。 ID =(INVOICESPAYMENTS.INVOICE_ID ))(WHERE(PAYMENTS.IS_DELETED =:C1 AND PAYMENTS.DATE_register> =:C2 AND PAYMENTS.DATE_register <=:C3)GROUP BY PAYMENT_ID OR BY BY PAYMENTS.DATE_register ASC

cakephp cakephp-3.x
1个回答
0
投票

mysql中sql_mode值的问题,因此您需要将sql_mode值设置为空白,然后可以尝试为您工作正常。

INVOICES__RECEIVER_RFC

[请让我知道其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.