/** * Builds a condition for filtering records by the configured match field, * e.g. MM_match_fields, foreign_match_fields or foreign_table_field. * * @param ExpressionBuilder $exprBuilder * @param ColumnMap $columnMap The column man for which the condition should be build. * @param string $childTableAlias The alias of the child record table used in the query. * @param string $parentTable The real name of the parent table (used for building the foreign_table_field condition). * @return string The match field conditions or an empty string. */ protected function getAdditionalMatchFieldsStatement($exprBuilder, $columnMap, $childTableAlias, $parentTable = null) { $additionalWhereForMatchFields = []; $relationTableMatchFields = $columnMap->getRelationTableMatchFields(); if (is_array($relationTableMatchFields) && !empty($relationTableMatchFields)) { foreach ($relationTableMatchFields as $fieldName => $value) { $additionalWhereForMatchFields[] = $exprBuilder->eq($childTableAlias . '.' . $fieldName, $this->queryBuilder->createNamedParameter($value)); } } if (isset($parentTable)) { $parentTableFieldName = $columnMap->getParentTableFieldName(); if (!empty($parentTableFieldName)) { $additionalWhereForMatchFields[] = $exprBuilder->eq($childTableAlias . '.' . $parentTableFieldName, $this->queryBuilder->createNamedParameter($parentTable)); } } if (!empty($additionalWhereForMatchFields)) { return $exprBuilder->andX(...$additionalWhereForMatchFields); } else { return ''; } }
/** * Builds a condition for filtering records by the configured match field, * e.g. MM_match_fields, foreign_match_fields or foreign_table_field. * * @param ColumnMap $columnMap The column man for which the condition should be build. * @param string $childTableName The real name of the child record table. * @param string $childTableAlias The alias of the child record table used in the query. * @param string $parentTable The real name of the parent table (used for building the foreign_table_field condition). * @return string The match field conditions or an empty string. */ protected function getAdditionalMatchFieldsStatement($columnMap, $childTableName, $childTableAlias, $parentTable = null) { $additionalWhereForMatchFields = ''; $relationTableMatchFields = $columnMap->getRelationTableMatchFields(); if (is_array($relationTableMatchFields) && !empty($relationTableMatchFields)) { $additionalWhere = array(); foreach ($relationTableMatchFields as $fieldName => $value) { $additionalWhere[] = $childTableAlias . '.' . $fieldName . ' = ' . $this->databaseHandle->fullQuoteStr($value, $childTableName); } $additionalWhereForMatchFields .= ' AND ' . implode(' AND ', $additionalWhere); } if (isset($parentTable)) { $parentTableFieldName = $columnMap->getParentTableFieldName(); if (isset($parentTableFieldName) && $parentTableFieldName !== '') { $additionalWhereForMatchFields .= ' AND ' . $childTableAlias . '.' . $parentTableFieldName . ' = ' . $this->databaseHandle->fullQuoteStr($parentTable, $childTableAlias); } } return $additionalWhereForMatchFields; }