// if (isset($childTableName)) {
// $row['tablenames'] = $childTableName;
// }
+
+ // attempt to support MM_insert_fields
+ $relationTableInsertFields = $columnMap->getRelationTableInsertFields();
+ if (count($relationTableInsertFields)) {
+ foreach($relationTableInsertFields as $insertField => $insertValue) {
+ $row[$insertField] = $insertValue;
+ }
+ }
+
$res = $this->storageBackend->addRow(
$relationTableName,
$row,
$dataMap = $this->dataMapper->getDataMap(get_class($parentObject));
$columnMap = $dataMap->getColumnMap($parentPropertyName);
$relationTableName = $columnMap->getRelationTableName();
+
+ $relationMatchFields = array(
+ $columnMap->getParentKeyFieldName() => (int)$parentObject->getUid()
+ );
+
+ // attempt to support MM_match_fields
+ $relationTableMatchFields = $columnMap->getRelationTableMatchFields();
+ if (count($relationTableMatchFields)) {
+ $relationMatchFields = array_merge($relationTableMatchFields,$relationMatchFields);
+ }
+
$res = $this->storageBackend->removeRow(
$relationTableName,
- array(
- $columnMap->getParentKeyFieldName() => (int)$parentObject->getUid()
- ),
+ $relationMatchFields,
FALSE);
return $res;
}
Tx_Extbase_Persistence_QOM_QueryObjectModelConstantsInterface::JCR_JOIN_TYPE_INNER,
$joinCondition
);
+
$query->setSource($source);
if (!empty($childSortByFieldName)) {
$query->setOrderings(array($relationTableName . '.' . $childSortByFieldName => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING));
}
- $query->matching($query->equals($parentKeyFieldName, $parentObject->getUid()));
+
+ // attempt to support MM_match_fields
+ $conditions = $query->equals($parentKeyFieldName, $parentObject->getUid());
+
+ $relationTableMatchFields = $columnMap->getRelationTableMatchFields();
+ if (count($relationTableMatchFields)) {
+ foreach($relationTableMatchFields as $relationTableMatchFieldName => $relationTableMatchFieldValue) {
+ $relationMatchCondition = $query->equals($relationTableMatchFieldName, $relationTableMatchFieldValue);
+ $conditions = $query->logicalAnd($conditions, $relationMatchCondition);
+ }
+ }
+ $query->matching($conditions);
+
} else {
throw new Tx_Extbase_Persistence_Exception('Could not determine type of relation.', 1252502725);
}