Version: current

# Class ManyManyDataObjectManager

Provides a tabuar list in your form with view, edit and add links to edit records with a "has-one"-relationship. Detail-views are shown in a greybox-iframe. Features pagination in the overview as well as the detail-views.

CAUTION: You need to make sure that the original form-call to the main controller (e.g. EditForm()) returns a form which includes this field even if no data is loaded, to provide a "starting point" for action_callfieldmethod and ReferencedField.

All URL data sent to and from ComplexTableField is encapsulated in $_REQUEST['ctf'] to avoid side-effects with the main controller.

Example-URL for a "DetailForm"-call explained: "/admin/family/?executeForm=EditForm&action_callfieldmethod&fieldName=Individual&childID=7&methodName=edit" - executeForm Name of the form on the main rendering page (e.g. "FamilyAdmin") - action_callfieldmethod Trigger to call a method of a single field in "EditForm" instead of rendering the whole thing - fieldName Name of the targeted formField - methodName Method on the formfield (e.g. "ComplexTableField") - childID Identifier of the database-record (the targeted table is determined by the $sourceClass parameter)

  Object
  ViewableData implements IteratorAggregate
  RequestHandler
  FormField
  TableListField
  ComplexTableField
  DataObjectManager
  HasManyDataObjectManager
  ManyManyDataObjectManager

Package: forms\fields-relational
Located at dataobject_manager/code/ManyManyDataObjectManager.php

## Methods summary

`public static` | # `set_only_related( mixed $bool )`
`public` | # `__construct( `ContentController` $controller, string $name, string $sourceClass, array $fieldList = null, `FieldSet` $detailFormFields = null, string $sourceFilter = "", string $sourceSort = "Created DESC", string $sourceJoin = "" )` Most of the code below was copied from ManyManyComplexTableField. Painful, but necessary, until PHP supports multiple inheritance. Most of the code below was copied from ManyManyComplexTableField. Painful, but necessary, until PHP supports multiple inheritance. #### Parameters $controller ContentController $controller $name string $name $sourceClass string $sourceClass $fieldList array $fieldList $detailFormFields FieldSet $detailFormFields $sourceFilter string $sourceFilter $sourceSort string $sourceSort $sourceJoin string $sourceJoin #### Overrides `HasManyDataObjectManager::__construct`
`public` | # `setParentClass( mixed $class )` (Optional) Setter for a correct parent-relation-class. Defaults to the record loaded into the surrounding form as a fallback. Caution: Please use the classname, not the actual column-name in the database. (Optional) Setter for a correct parent-relation-class. Defaults to the record loaded into the surrounding form as a fallback. Caution: Please use the classname, not the actual column-name in the database. #### Parameters $class $className string #### Overrides `HasManyDataObjectManager::setParentClass`
`protected` | # `loadSort( )` #### Overrides `DataObjectManager::loadSort`
`public` | # `setOnlyRelated( mixed $bool )`
`public` | # `OnlyRelated( )`
`public` | # `getQueryString( mixed $params = array() )` #### Overrides `DataObjectManager::getQueryString`
`public` | # `OnlyRelatedLink( )`
`public` | # `AllRecordsLink( )`
`public string` | # `getQuery( mixed $limitClause = null )` Generates the query for sourceitems (without pagination/limit-clause) Generates the query for sourceitems (without pagination/limit-clause) #### Returns `string` string #### Overrides `HasManyDataObjectManager::getQuery`
`public` | # `getParentIdName( mixed $parentClass, mixed $childClass )` Returns the db-fieldname of the currently used has_one-relationship. Returns the db-fieldname of the currently used has_one-relationship. #### Overrides `ComplexTableField::getParentIdName`
`public` | # `ExtraData( )` #### Overrides `HasManyDataObjectManager::ExtraData`
`public` | # `Sortable( )` #### Overrides `DataObjectManager::Sortable`
`public` | # `SortableClass( )` #### Overrides `HasManyDataObjectManager::SortableClass`

### Methods inherited from HasManyDataObjectManager

`controllerClass()`, `getControllerID()`, `hasMarkingPermission()`, `saveInto()`, `setMarkingPermission()`, `sourceItems()`

### Methods inherited from DataObjectManager

`AddForm()`, `AddLink()`, `AddTitle()`, `BaseLink()`, `ConfirmDelete()`, `CurrentLink()`, `FieldHolder()`, `FilterDropdown()`, `FirstLink()`, `HasFilter()`, `Headings()`, `LastLink()`, `Link()`, `NestedType()`, `NextLink()`, `Paginated()`, `PaginatedLink()`, `PerPageDropdown()`, `PluralTitle()`, `PopupWidth()`, `PrevLink()`, `RelativeLink()`, `SearchValue()`, `ShowAll()`, `ShowAllLink()`, `SingleTitle()`, `addPermission()`, `allow_assets_override()`, `allow_css_override()`, `getColumnWidths()`, `getCustomFieldsFor()`, `getRawDetailFields()`, `getSetting()`, `handleDuplicate()`, `handleItem()`, `loadSourceFilter()`, `removePermission()`, `saveComplexTableField()`, `setAddTitle()`, `setColumnWidths()`, `setConfirmDelete()`, `setFilter()`, `setFilterEmptyString()`, `setPerPageMap()`, `setPluralTitle()`, `setPopupWidth()`, `setSingleTitle()`, `setSourceFilter()`, `setUseViewAll()`, `setWideMode()`, `set_confirm_delete()`, `set_popup_width()`, `sourceID()`

### Methods inherited from ComplexTableField

`IsAddMode()`, `ItemCount()`, `Items()`, `PopupHeight()`, `Title()`, `add()`, `createFieldSet()`, `getFieldsFor()`, `getParentClass()`, `getParentIdNameRelation()`, `getParentRecord()`, `getValidatorFor()`, `getViewer()`, `isComposite()`, `setController()`, `setDetailFormValidator()`, `setParentIdName()`, `setPopupCaption()`, `setPopupSize()`, `setRelationAutoSetting()`, `setTemplatePopup()`, `sourceClass()`, `sourceFilter()`

### Methods inherited from TableListField

`Actions()`, `Can()`, `ExportLink()`, `FieldList()`, `FirstItem()`, `GroupedItems()`, `HasGroupedItems()`, `HasSummary()`, `LastItem()`, `ListStart()`, `Name()`, `NamePlural()`, `NameSingular()`, `PageSize()`, `PrintLink()`, `ShowPagination()`, `SummaryFields()`, `SummaryTitle()`, `TotalCount()`, `Utility()`, `addSummary()`, `ajax_refresh()`, `colFunction_avg()`, `colFunction_sum()`, `delete()`, `disableSorting()`, `export()`, `filterString()`, `generateExportFileData()`, `getCastedValue()`, `getCsvQuery()`, `getCsvSeparator()`, `getExtraLinkParams()`, `getPermissions()`, `index()`, `isFieldSortable()`, `performReadonlyTransformation()`, `permissions_for_object()`, `printall()`, `removeCsvHeader()`, `removeSummary()`, `setCSVFieldFormatting()`, `setClick_AjaxLoad()`, `setClick_PopupLoad()`, `setCsvSeparator()`, `setCustomCsvQuery()`, `setCustomQuery()`, `setCustomSourceItems()`, `setExtraLinkParams()`, `setFieldCasting()`, `setFieldFormatting()`, `setFieldList()`, `setFieldListCsv()`, `setHighlightConditions()`, `setPageSize()`, `setPermissions()`, `setShowPagination()`, `setTemplate()`

### Methods inherited from FormField

`Field()`, `LeftTitle()`, `Message()`, `MessageType()`, `Required()`, `RightTitle()`, `SmallFieldHolder()`, `Type()`, `Value()`, `addExtraAttribute()`, `addExtraClass()`, `allowHTML5()`, `allow_html5()`, `attrName()`, `attrTitle()`, `attrValue()`, `createTag()`, `dataValue()`, `debug()`, `describe()`, `extraClass()`, `fieldHolderTemplates()`, `fieldTemplates()`, `forTemplate()`, `getCustomValidationMessage()`, `getExtraClasses()`, `getForm()`, `getHTML5Attribute()`, `getTabIndex()`, `getTabIndexHTML()`, `hasClass()`, `hasData()`, `id()`, `isDisabled()`, `isReadonly()`, `jsValidation()`, `name_to_label()`, `performDisabledTransformation()`, `removeExtraAttribute()`, `removeExtraClass()`, `rootFieldSet()`, `securityTokenEnabled()`, `setAutocomplete()`, `setContainerFieldSet()`, `setCustomValidationMessage()`, `setDisabled()`, `setError()`, `setFieldHolderTemplate()`, `setForm()`, `setHTML5Attribute()`, `setLeftTitle()`, `setName()`, `setReadonly()`, `setRightTitle()`, `setSmallFieldHolderTemplate()`, `setTabIndex()`, `setTitle()`, `setValue()`, `smallFieldHolderTemplates()`, `transform()`, `useHTML5()`, `use_html5()`, `validate()`

### Methods inherited from RequestHandler

`allowedActions()`, `checkAccessAction()`, `getRequest()`, `handleRequest()`, `hasAction()`, `httpError()`

### Methods inherited from ViewableData

`ATT_val()`, `BaseHref()`, `CSSClasses()`, `ColumnBreak()`, `ColumnCalc()`, `ColumnNumber()`, `ColumnPad()`, `ColumnPos()`, `CurrentMember()`, `CurrentPage()`, `Debug()`, `Even()`, `EvenOdd()`, `First()`, `FirstLast()`, `HasPerm()`, `IsAjax()`, `JS_val()`, `Last()`, `Me()`, `Middle()`, `MiddleString()`, `Modulus()`, `MultipleOf()`, `Odd()`, `Pos()`, `RAW_val()`, `SQL_val()`, `ThemeDir()`, `ThemeName()`, `Top()`, `TotalItems()`, `XML_val()`, `__get()`, `__isset()`, `__set()`, `buildCastingCache()`, `cachedCall()`, `castingClass()`, `castingHelper()`, `castingHelperPair()`, `castingObjectCreator()`, `castingObjectCreatorPair()`, `customise()`, `defineMethods()`, `escapeTypeForField()`, `getField()`, `getIterator()`, `getSecurityID()`, `getXMLValues()`, `hasField()`, `hasValue()`, `i18nLocale()`, `iteratorProperties()`, `obj()`, `renderWith()`, `setCustomisedObj()`, `setField()`

### Methods inherited from Object

`__call()`, `__toString()`, `__wakeup()`, `addMethodsFrom()`, `addStaticVars()`, `addWrapperMethod()`, `add_extension()`, `add_static_var()`, `allMethodNames()`, `cacheToFile()`, `cacheToFileWithArgs()`, `clearCache()`, `combined_static()`, `create()`, `createMethod()`, `create_from_string()`, `exists()`, `extInstance()`, `extend()`, `getCustomClass()`, `getExtensionInstance()`, `getExtensionInstances()`, `get_extensions()`, `get_static()`, `hasExtension()`, `hasMethod()`, `has_extension()`, `invokeWithExtensions()`, `is_a()`, `loadCache()`, `parentClass()`, `parse_class_spec()`, `remove_extension()`, `sanitiseCachename()`, `saveCache()`, `set_stat()`, `set_static()`, `set_uninherited()`, `stat()`, `strong_create()`, `uninherited()`, `uninherited_static()`, `useCustomClass()`

### Magic methods summary

## Properties summary

`protected static mixed` | $only_related | #
`public string` | $RelationType | #
`public string` | $itemClass | # Classname for each row/item Classname for each row/item
`protected boolean` | $OnlyRelated | #
`protected mixed` | $sortableOwner | #

### Properties inherited from HasManyDataObjectManager

`$addTitle`, `$htmlListEndName`, `$htmlListField`, `$joinField`, `$markingPermission`, `$relationAutoSetting`, `$template`

### Properties inherited from DataObjectManager

`$actions`, `$allow_assets_override`, `$allow_css_override`, `$column_widths`, `$confirmDelete`, `$confirm_delete`, `$filter`, `$filter_empty_string`, `$filter_label`, `$filter_map`, `$filtered_field`, `$hasNested`, `$isNested`, `$per_page`, `$per_page_map`, `$popupClass`, `$popupWidth`, `$popup_width`, `$search`, `$showAll`, `$singleTitle`, `$sort`, `$sort_dir`, `$start`, `$templatePopup`, `$url_handlers`, `$use_view_all`

### Properties inherited from ComplexTableField

`$controller`, `$defaultAction`, `$detailFormFields`, `$detailFormValidator`, `$parentClass`, `$parentIdName`, `$permissions`, `$popupCaption`, `$popupHeight`, `$requirementsForPopupCallback`, `$showPagination`, `$sourceItems`, `$sourceJoin`, `$viewAction`

### Properties inherited from TableListField

`$IsReadOnly`, `$Markable`, `$MarkableTitle`, `$__cachedQuery`, `$cachedSourceItems`, `$clickAction`, `$csvFieldEscape`, `$csvFieldFormatting`, `$csvHasHeader`, `$csvSeparator`, `$customCsvQuery`, `$customQuery`, `$customSourceItems`, `$disableSorting`, `$exportButtonLabel`, `$extraLinkParams`, `$fieldCasting`, `$fieldFormatting`, `$fieldList`, `$fieldListCsv`, `$groupByField`, `$highlightConditions`, `$methodName`, `$pageSize`, `$paginationBaseLink`, `$readOnly`, `$sourceClass`, `$sourceFilter`, `$sourceSort`, `$summaryFieldList`, `$summaryTitle`, `$totalCount`

### Properties inherited from FormField

`$autocomplete`, `$containerFieldSet`, `$customValidationMessage`, `$description`, `$disabled`, `$dontEscape`, `$extraAttributes`, `$extraClass`, `$extraClasses`, `$fieldHTML5`, `$fieldHolderTemplate`, `$form`, `$html5Attributes`, `$leftTitle`, `$message`, `$messageType`, `$name`, `$possible_autocomplete_values`, `$readonly`, `$rightTitle`, `$smallFieldHolderTemplate`, `$tabIndex`, `$title`, `$use_html5`, `$value`

### Properties inherited from RequestHandler

`$allowed_actions`, `$brokenOnConstruct`, `$request`

### Properties inherited from ViewableData

`$casting`, `$customisedObject`, `$default_cast`, `$failover`, `$iteratorPos`, `$iteratorTotalItems`

### Properties inherited from Object

`$class`, `$extension_instances`, `$extensions`

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -