$transactionHistoryTable = TableRegistry::getTableLocator()->get("TransactionHistories");

            $paymentReports = $transactionHistoryTable->find()
                ->select(['admission_roll', 'transaction_no', 'api_payment_date', 'only_fee', 'customer_paid_amount'])
                ->contain([
                    'Students' => ['fields' => ['id', 'full_name_en', 'student_contact', 'registration_number']],
                    'Students.AcademicInfos' => function (Query $query) {
                        return $query
                            ->select(['roll' => 'AcademicInfos.roll'])
                            ->where(['AcademicInfos.status' => 1]);
                    },
                    'ClassNames.Departments' => function (Query $q) {
                        return $q
                            ->select([
                                'Departments.id',
                                'Departments.department_code',
                                'Departments.title',
                            ])
                            ->where(['Departments.status' => 1]);
                    },
                    'AdmissionApplicationFormTempDatas' => ['fields' => ['full_name_en' => "JSON_EXTRACT(data_infos, '$.full_name_en')",'contact_number' => 'AdmissionApplicationFormTempDatas.contact_number']]
                ])
                ->where($txnConditions)
                ->order(['CAST(roll AS UNSIGNED)' => 'ASC']);