---
title: "1:n Beziehung add: Call to a member function attach() on a non-object"
url: "https://www.typo3.net/d/110465-1n-beziehung-add-call-to-a-member-function-attach-on-a-non-object"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage","PHP"]
created: "2012-05-06"
last_reply: "2014-10-22"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# 1:n Beziehung add: Call to a member function attach() on a non-object

Extensions › Extbase · 2 Antworten · gestartet 2012-05-06

## Eröffnungsbeitrag

**rleuthold** · 2012-05-06 · [Beitrag #1](https://www.typo3.net/d/110465-1n-beziehung-add-call-to-a-member-function-attach-on-a-non-object/1)

Hallo zusammen,

Meine Models Unit und Reservations haben eine 1:n Beziehung (unit->reservations).

Nun übergebe ich der create Action methode im ReservationController eine unit und eine neue Reservation und möchte diese mittels

```php
$unit->addReservation($newReservation);
```

der Unit zuweisen.

Dabei erhalte ich folgenden Error:

```php
Fatal error: Call to a member function attach() on a non-object
```

Im Unit Model wird die Relation wie folgt verwaltet:

```php
/**
 * __construct
 *
 * @return void
 */
public function __construct() {
	//Do not remove the next line: It would break the functionality
	$this->initStorageObjects();
}

/**
 * Initializes all Tx_Extbase_Persistence_ObjectStorage properties.
 *
 * @return void
 */
protected function initStorageObjects() {
	$this->reservations = new Tx_Extbase_Persistence_ObjectStorage();
}

/**
 * Adds a Reservation
 *
 * @param Tx_AboUnitReservation_Domain_Model_Reservation $reservation
 * @return void
 */
public function addReservation(Tx_AboUnitReservation_Domain_Model_Reservation $reservation) {	
	$this->reservations->attach($reservation);
}
```

Wenn ich nun die addReservation methode wie folgt ergänze:

```php
public function addReservation(Tx_AboUnitReservation_Domain_Model_Reservation $reservation) {
		
	if($this->reservations == null) {
		$this->reservations = new Tx_Extbase_Persistence_ObjectStorage();
	}
		
	$this->reservations->attach($reservation);
}
```

Funktioniert es - aber ich verstehe nicht warum es mit dem ursprünglichen Code nicht funktioniert.

Wenn ich einen Breakpoint in der initStorageObjects() setze, kann ich sehen, dass die Methode vor dem Aufruf der create action ausgeführt wird.

Hat jemand eine Idee, warum das mit dem ursprünglichen Code trotzdem nicht funktioniert?

Grüsse & Danke
Rico

## Antworten

### [#2](https://www.typo3.net/d/110465-1n-beziehung-add-call-to-a-member-function-attach-on-a-non-object/2) · conic · 2013-11-14

Hast du mittlerweile rausgefunden woran es lag?
Ich habe heute denselben Fehler gehabt und nur mit deinem Fix lösen können, aber schön ist das natürlich nicht!
Würde mich sehr über eine Antwort freuen, auch wenn's schon ein Jahr her ist...

Aimo

### [#3](https://www.typo3.net/d/110465-1n-beziehung-add-call-to-a-member-function-attach-on-a-non-object/3) · Opresse · 2014-10-22

So auch wenn es wieder ein Jahr später ist, ich habe eine Lösung für das Problem gefunden und hoffe dass es anderen weiterhelfen kann:

Bei mir war das Problem dass mein Feld in der TCA + SQL Table einen anderen Namen hatte als
im Model.

Bedeutet in dem Beispiel oben "reservations" muss genau so in der TCA als auch als Datenbankfeld existieren. Oder man muss das Mapping anpassen.

---

Quelle: „1:n Beziehung add: Call to a member function attach() on a non-object“, typo3.net, https://www.typo3.net/d/110465-1n-beziehung-add-call-to-a-member-function-attach-on-a-non-object
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
