# Zugriff auf Attribute via ModelManager

**URL:** <https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272>\
**Category:** Programmierung\
**Created:** [4. Januar 2018 um 15:32 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272 "2018-01-04T15:32:05Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![rene\_muthpartners](https://avatars.discourse-cdn.com/v4/letter/r/8e8cbc/32.png) [@rene\_muthpartners](https://forum.shopware.com/u/rene_muthpartners)\
**Post date:** [4. Januar 2018 um 15:32 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/1 "2018-01-04T15:32:05Z")

</div>

Hallo Allerseits!

wir haben für unser ERP-System eine Schnittstelle via Shopware-Plugin realsiert, die bis Shopware 5.3 tadellos läuft.

Seit Umstieg auf SW 5.3 klappt unser Zugriff auf sämtliche Attributs-Felder nicht mehr.

```
/** @var \Shopware\Models\Attribute\ArticleSupplier $supplier */
$supplier = $this->manager->getRepository('Shopware\Models\Attribute\ArticleSupplier')
->findOneBy(['my_field' => $my_value]);

```

Dieser wird nun an sämtlichen Stellen mit „Error: Unrecognized field: my\_value“ quittiert.

Ich habe mich eingelesen und eine Weiche in der Bootstrap.php eingebaut:

```
private function createAttributes()
{
    /** @var ModelManager $em */
    $em = $this->container->get('models');
    $metaDataCache = $em->getConfiguration()->getMetadataCacheImpl();

    if ( SW52 ) {

        /** @var CrudService $service */
	    $service = $this->container->get('shopware_attribute.crud_service');
    
        $service->update('s_articles_supplier_attributes', 'my_field', 'integer', [
				'label' => 'My Field',
				'displayInBackend' => true,
				'position' => 900,
				'custom' => false,
				'translatable' => true,
			]);

    } else {

        $em->addAttribute(
				's_articles_supplier_attributes',
				'my',
				'field',
				'int(11)',
				true,
				null
			);
    }
    $metaDataCache->deleteAll();
    $em->generateAttributeModels();
}

```

&nbsp;

Das Feld wird brav in der DB erzeugt, die Models werden nur nicht richtig aktualisiert?

Was hat sich geändert bzw. was mache ich falsch?

&nbsp;

LG

René

&nbsp;

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![taltholtmann](https://avatars.discourse-cdn.com/v4/letter/t/439d5e/32.png) [@taltholtmann](https://forum.shopware.com/u/taltholtmann)\
**Post date:** [8. Januar 2018 um 10:12 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/2 "2018-01-08T10:12:52Z")

</div>

Habs gerade in der Developer Dokumentation nachgetragen:

[https://developers.shopware.com/developers-guide/cheat-sheet/#naming-attribute-generation](https://developers.shopware.com/developers-guide/cheat-sheet/#naming-attribute-generation)

Wenn man einen Unterstrich in dem Feld Namen hat muss man bei der Query Camel Case nutzen.

Konnte das Verhalten allerdings auch&nbsp;bei 5.2 nachstellen.

Ich hoffe das hilft erstmal und löst dein Problem 😉

---

<div class="post-metadata">

**Author:** ![rene\_muthpartners](https://avatars.discourse-cdn.com/v4/letter/r/8e8cbc/32.png) [@rene\_muthpartners](https://forum.shopware.com/u/rene_muthpartners)\
**Post date:** [8. Januar 2018 um 15:02 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/3 "2018-01-08T15:02:00Z")

</div>

Hallo&nbsp;taltholtmann,

&nbsp;

danke für deine Rückmeldung.

Die Schreibweise mit CamelCase war uns auch vorher bewusst.

Tatsächlich steht in der DB “my\_value **I** d”, der Zugriff via SW \< 5.3 lautet: findByOne(‘my **V** alue **I** d’)

&nbsp;

Mein Problem besteht weiterhin: ich habe in der Bootstrap folgendes zum Testen eingetragen:

```
$service->update('s_core_customergroups_attributes', 'test123', 'integer', [
	'label' => 'test123',
	'displayInBackend' => true,
	'position' => 1,
	'custom' => false,
	'translatable' => false,
]);

```

&nbsp;

Nach einer&nbsp;Neuinstallation des Plugins und dem leeren des Caches existiert das Feld auch in der DB, jeweisl in der tabelle&nbsp; **s\_core\_customergroups\_attributes** und **s\_attribute\_configuration**.

Aber greife ich wie folgt auf meine neues Feld zu:

```
$group = $this->manager->getRepository('Shopware\Models\Attribute\CustomerGroup')
	->findOneBy(['test123' => "2"]);

```

bekomme ich weiterhin das hier:&nbsp;

“Unrecognized field: test123”

---

<div class="post-metadata">

**Author:** ![waldicom](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/waldicom/32/12881_2.png) [@waldicom](https://forum.shopware.com/u/waldicom)\
**Post date:** [8. Januar 2018 um 15:11 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/4 "2018-01-08T15:11:05Z")

</div>

Vielleicht würde es helfen, wenn du im Backend, unter Einstellungen-\>Freitextfeld-Verwaltung das gewünschte Model öffnest (Kundengruppe (s\_core\_customergroups\_attributes)) und auf den Button „Model generierren“ (oben links) klickst?

Zusätzlich würde ich in der Datei var/cache/production\_DATUM/doctrine/attribtutes/CustomerGroup.php schauen, ob das Feld „test123“ hier existiert

---

<div class="post-metadata">

**Author:** ![rene\_muthpartners](https://avatars.discourse-cdn.com/v4/letter/r/8e8cbc/32.png) [@rene\_muthpartners](https://forum.shopware.com/u/rene_muthpartners)\
**Post date:** [8. Januar 2018 um 15:27 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/5 "2018-01-08T15:27:26Z")

</div>

Hi waldicom,

danke für die hilfreichen Tips.

Habe im Backend die Models generieren lassen und in den Cache geschaut, meine Attribute sind vorhanden:

```
    /**
     * @var integer $test123
     *
     * @ORM\Column(name="test123", type="integer", nullable=true)
     */
     protected $test123;

```

Leider bekomme ich weiterhin diesen Fehler 😕

---

<div class="post-metadata">

**Author:** ![rene\_muthpartners](https://avatars.discourse-cdn.com/v4/letter/r/8e8cbc/32.png) [@rene\_muthpartners](https://forum.shopware.com/u/rene_muthpartners)\
**Post date:** [16. Januar 2018 um 15:26 UTC](https://forum.shopware.com/t/zugriff-auf-attribute-via-modelmanager/50272/6 "2018-01-16T15:26:31Z")

</div>

Das Leeren des Proxy-Caches hat mein Problem mit dem Model-Zugriff gelöst.

Weiterhin besteht das Problem, dass auf ein Attribut ‚myPerfect **I** d‘ (DB: ‚my\_perfect **I** d‘) ab SW 5.3 aufgrund des großen „i“ nicht mehr zugegriffen werden kann.

Der CRUD-Manager ist auch nicht im Stande, dieses Feld zu normalisieren. Ein Dreiecks-Tausch zum Umbenennen des Attributes via update()-Methode&nbsp;ist auch gescheitert.

Um ein Verlust&nbsp;der Daten in dem Attribut zu vermeiden, aber das Plugin kompatibel zu \>=&nbsp;SW 5.3 zu halten, bleibt mir scheinbar&nbsp;nur noch:

```
ALTER TABLE `s_core_customergroups_attributes` CHANGE COLUMN `my_perfectId` `my_perfectid` INT(11) NULL;

```

in der Update-Routine für sämtliche betroffenen Attributs-Tabellen.

LG

René
