Best Practise Datenbank Abfrage eines Plugins

Hallo zusammen,

Ich suche mehr Dokumentation bzw. eine Lösung wie ich Plugin Datenbank Abfragen aus einem anderen Plugin stellen kann. Konkret will ich mit meinem Plugin (meinplugin) Daten aus einem anderen Plugin (einplugin) abfragen, welche in der Tabelle s_plugin_einplugin_tabelle1 liegen. Im anderen Plugin (einplugin) gibt es auch Models für die Datenbank Einträge.

Auch ist mir der Best Practise Ansatz hierzu noch nicht klar - frage ich die Daten mittels einer SQL Abfrage ab oder lieber über einen Entity Manager?

 

Vielen Dank schonmal im Vorraus für eure Hilfe!

Du kannst doch “ganz normal” über \Shopware\CustomModels\Plugin1\Model auf die models zugreifen?! Im best case würdest du im ersten Plugin in der repository des models einfach alle benötigten Methoden zur Verfügung stellen.

Viele Grüße

1 „Gefällt mir“

Hallo @ludwigvh‍,

den Entity Manager vermeiden wir so gut es geht im Frontend, da dieser nicht zwangsweise die beste Performance hat.
Nichtsdestotrotz solltest du ganz normal auf die Models des anderen Plugins zugreifen und diese nutzen können.

Am Besten nutzt du dafür allerdings die Dbal-Connection, die ebenfalls einen QueryBuilder anbietet, ähnlich dem EntityManager, jedoch deutlich performanter arbeitet.
Alternativ ist natürlich auch Plain-SQL okay.

Kleines Beispiel:

/** @var \Doctrine\DBAL\Query\QueryBuilder $queryBuilder */
$queryBuilder = $this->get('dbal_connection')->createQueryBuilder();
$result = $queryBuilder->select('id, name')
   ->from('s_my_plugin_table', 'myPluginAlias')
   ->where('name = :exampleParam')
   ->setParameter(':exampleParam', 'TestName')
   ->execute()
   ->fetchAll();

Am Besten überprüfst du vorher, ob das zweite Plugin wirklich installiert ist.

Hilft dir das ggf. bereits weiter?

Gruß,
Patrick  Shopware

1 „Gefällt mir“

@Patrick Stahl schrieb:

den Entity Manager vermeiden wir so gut es geht im Frontend, da dieser nicht zwangsweise die beste Performance hat.
Nichtsdestotrotz solltest du ganz normal auf die Models des anderen Plugins zugreifen und diese nutzen können.

Wo finde ich nähere Infos wie die Models eingesetzt werden z.B. wie ich diese im Template oder innerhalb eines Plugins verwende? In diesem Kapitel (Dev Guide / Models) geht es ja soweit ich richtig verstanden habe lediglich um die Erstellung von Models?! Mir fehlt die Verbindung des Model Kapitels mit z.B. dem Template oder der Verwendung des Models in einem Service.

Nochmals vielen Dank für eure schnelle Hilfe!

Dazu kannst du dir die Doctrine Dokumentation anschauen http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/

1 „Gefällt mir“

@Shyim schrieb:

Dazu kannst du dir die Doctrine Dokumentation anschauen http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/

Letztendlich hab ich das ganze über eine Native Query mit SQL Code abgefragt und die Daten einfach als ScalarEntity gemappt. Geht bestimmt auch schöner über ein richtiges Entity Mapping mit dem entsprechenden Model, dazu kenne ich mich mit den Shopware Doctrine Models noch zu wenig aus.