[我正在尝试通过关联的表格发票上的字段过滤一个表格付款。在查询对象上使用功能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
mysql中sql_mode值的问题,因此您需要将sql_mode值设置为空白,然后可以尝试为您工作正常。
INVOICES__RECEIVER_RFC
[请让我知道其他内容。