Models -> wie prüfen, ob Tabelle schon existiert?

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

 

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.

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!!!
        }
    }

 

Shopware selber macht einfach direkt immer CREATE TABLE, fängt die exception ab und ignoriert sie :slight_smile:

Viele Grüße

Ja, das hab ich auch schonmal gesehen. Elegant wie ein Elefant im Porzelanladen  Grin