FANDOM


Bidirectionale MM RelationBearbeiten

Manchmal ist es nötig eine Releation auch von der anderen Seite zu mappen:

Im TCA des Agregateroot:Bearbeiten

'branches' => array(
	'exclude' => 0,
	'label'   => 'LLL:EXT:projektname_jobs/Resources/Private/Language/locallang_db.xml:tx_projektnamejobs_domain_model_jobs.branches',
	'config'  => array(
		'type' => 'select',
		'foreign_table' => 'tx_projektnamejobs_domain_model_branches',
		'MM' => 'tx_projektnamejobs_jobs_branches_mm',

		'size' => 5,
		'minitems' => 0,
		'maxitems' => 10,
		
	)
),

Im TCA der Relation:Bearbeiten

'jobs' => array(
	'exclude' => 0,
	'label'   => 'LLL:EXT:projektname_jobs/Resources/Private/Language/locallang_db.xml:tx_projektnamejobs_domain_model_jobs.jobs',
	'config'  => array(
		'type' => 'select',
		'foreign_table' => 'tx_projektnamejobs_domain_model_jobs',
		#'foreign_table_where' => 'ORDER BY tx_projektnamejobs_domain_model_jobs.title',
		'MM' => 'tx_projektnamejobs_jobs_branches_mm',
		'MM_opposite_field' => 'branches',

		'size' => 5,
		'minitems' => 0,
		'maxitems' => 10,
	)
),

Das Feld "jobs" muss nicht im im Array "showRecordFieldList" oder im Array "types->showitem" eingetragen werden. Wer aber im Typo3 BE im Datensatz die bidirectionale Relation sehen und Editieren möchte kann das gerne noch eintragen.

GANZ WICHTIG:

In der Relations MySQL Tabelle muss das Feld "jobs" als Int(11) vorhanden sein sonst geht es nicht. (Logisch ist das meine Meinung nach nicht, da alle Informationen ja aus der MySQL MM Brücke entnommen werden können. Ich denke das es nur notwendig ist um die Referenzierungen einzutragen)

Es kann auch der TCA Feldtyp "Inline" verwended werden!

Im Model des AgregatrootBearbeiten

/**
 * branches
 * @var Tx_Extbase_Persistence_ObjectStorage<Tx_projektnameJobs_Domain_Model_Branches>
 */
protected $branches;

/**
 * Setter for branches
 *
 * @param Tx_Extbase_Persistence_ObjectStorage<Tx_projektnameJobs_Domain_Model_Branches> $branches branches
 * @return void
 */
public function setBranches(Tx_Extbase_Persistence_ObjectStorage $branches) {
	$this->branches = $branches;
}

/**
 * Getter for branches
 *
 * @return Tx_Extbase_Persistence_ObjectStorage<Tx_projektnameJobs_Domain_Model_Branches> branches
 */
public function getBranches() {
	return $this->branches;
}

/**
 * Adds a Branches
 *
 * @param Tx_projektnameJobs_Domain_Model_Branches The Branches to be added
 * @return void
 */
public function addBranch(Tx_projektnameJobs_Domain_Model_Branches $branch) {
	$this->branches->attach($branch);
}
	
/**
 * Removes a Branches
 *
 * @param Tx_projektnameJobs_Domain_Model_Branches The Branches to be removed
 * @return void
 */
public function removeBranch(Tx_projektnameJobs_Domain_Model_Branches $branch) {
	$this->branches->detach($branch);
}

Im Model der RelationBearbeiten

/**
 * jobs
 * @var Tx_Extbase_Persistence_ObjectStorage<Tx_projektnameJobs_Domain_Model_Jobs>
 */
protected $jobs;


/**
 * Getter for jobs
 *
 * @return Tx_Extbase_Persistence_ObjectStorage<Tx_projektnameJobs_Domain_Model_Jobs> jobs
 */
public function getJobs() {
	return $this->jobs;
}