# Models -&gt; wie prüfen, ob Tabelle schon existiert?

**URL:** <https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188>\
**Category:** Programmierung\
**Created:** [11. September 2017 um 09:50 UTC](https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188 "2017-09-11T09:50:47Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![mahlzeit](https://avatars.discourse-cdn.com/v4/letter/m/3da27b/32.png) [@mahlzeit](https://forum.shopware.com/u/mahlzeit)\
**Post date:** [11. September 2017 um 09:50 UTC](https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188/1 "2017-09-11T09:50:47Z")

</div>

Hallo Shopware-Gemeinde,

an welcher Stelle im Tutorial findet man, wie man im ORM-Mapping in den Models abfragt, ob eine Tabelle in der Datenbank schon existiert?

Bzw. kann mir jemand einen Tipp geben wie ich das anstelle?

Gruß und Dank im Voraus

&nbsp;

EDIT:

Komme hier nicht weiter.

Ich rufe das Model beim Installieren des Plugins über die function updateSchema mit dem SchemaTool so auf:

```
    private function updateSchema()
    {
        /** @var ModelManager $entityManager */
        $entityManager = $this->container->get('models');

        $tool = new SchemaTool($entityManager);

        $classMetaData = [
            $entityManager->getClassMetadata(meinModel::class),
        ];

        $tool->createSchema($classMetaData);
    }

```

Hier das Model:

```
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Shopware\Components\Model\ModelEntity;

/**
 * @ORM\Entity(repositoryClass="Repository")
 * @ORM\Table(name="meine_Datenbanktabelle")
 */
class meinModel extends ModelEntity
{ 
    ....

```

Wo bzw. an welcher Stelle kann ich hier ansetzen um zu prüfen, ob ‚meine\_Datenbanktabelle‘ schon existiert, um im Falle einer Neuinstallation eine Fehlermeldung zu vermeiden, wenn ich die Tabelle bei der Deinstallation nicht lösche?

Würde mich über Hilfe sehr freuen.

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [11. September 2017 um 12:54 UTC](https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188/2 "2017-09-11T12:54:06Z")

</div>

Ich mach das immer so. Habe aber auch schon andere Möglichkeiten gesehen:

```
$em->getConnection()->getSchemaManager()->tablesExist($arrayWithTableNamesAsString)

    private function createCustomModelSchema($models = array())
    {
        /** @var $em \Shopware\Components\Model\ModelManager */
        $em = $this->container->get('models');
        $tool = new \Doctrine\ORM\Tools\SchemaTool($em);

        $classes = array();
        foreach ($models as $m) {
            $metadata = $em->getClassMetadata($m);
            // only add model to schema, if it does not already exist (coz this throws an exception)
            if (!$em->getConnection()->getSchemaManager()->tablesExist(array($metadata->getTableName()))) {
                $classes[] = $metadata;
            }
        }
        if (count($classes) > 0) {
            $tool->createSchema($classes); // never use updateSchema(), coz this will drop ALL OTHER tables!!!
        }
    }

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)\
**Post date:** [11. September 2017 um 12:59 UTC](https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188/3 "2017-09-11T12:59:51Z")

</div>

Shopware selber macht einfach direkt immer&nbsp;CREATE TABLE,&nbsp;fängt die exception ab und ignoriert sie 🙂

Viele Grüße

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [11. September 2017 um 13:09 UTC](https://forum.shopware.com/t/models-gt-wie-prufen-ob-tabelle-schon-existiert/48188/4 "2017-09-11T13:09:01Z")

</div>

Ja, das hab ich auch schonmal gesehen. Elegant wie ein Elefant im Porzelanladen&nbsp; ![Grin](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/1X/70033cde8e8ff79cfa538293ae71318d6f788423.png "Grin")
