Datenbank Connection im Subscriber

Hi,

 

woher bekomme ich eine Datenbank Connection in einem Plugin?

Du kannst dir Doctrine\DBAL\Connection injecten.

Was willste denn machen? Normalerweise sollte alles über den DAL gehen wenn möglich.

Ich will alle Bestellung mit einem bestimmten Produkt wissen.

In dem Subscriber kann ich die Connection nicht erzeugen.

 $connection = $this-\>container-\>get(Connection::class); 

Das führt zu einem Fehler weil “container” nicht vorhanden ist.

In der Plugin Klasse geht das wiederum, da wird auch von einer anderen Klasse geerbt.

Dann nutze doch den DAL, dafür ist er da :) 

$criteria = new Criteria();
$criteria->addFilter ...

https://docs.shopware.com/en/shopware-platform-dev-en/how-to/reading-entities-dal

$productRepository = $this->container->get(‚product.repository‘);

Das klappt nicht.

„container“ ist in der Klasse nicht vorhanden.

Schau es dir mal hier an: https://github.com/Shape-and-Shift/shopware-tags/blob/master/src/Storefront/Subscriber/ShowTagsOnProductView.php

Und nicht das argument in der services.xml/yaml vergessen -> https://github.com/Shape-and-Shift/shopware-tags/blob/master/src/Resources/config/services.xml#L8-L10

Wir kommen der Sache schon näher. Jetzt muss ich nur noch rausfinden wie ich Bestellungen anhand einer Produkt ID bekomme.

Über das order Repository würde ich mal vermuten :wink:

In der Tabelle order_line_item stehen alle orders mit products drin. Die musste dir holen.

Wenn ich eine normale DB Connection hätte, wäre das ganze auch kein Problem. Aber ich kenne mich mit dem Shopware Datenbank zeugs nicht aus.

anstatt des jeweiligen repositorys kannst du auch den ServiceContainer im Constructor deines Subscribers als Argument nutzen.

protected $container;

public function __construct(Container $container){
        $this->container = $container;
}


public function doSomething(){
   $connection = $this->container->get(Connection::class);


   $connection->executeQuery('SELECT * FROM irgendwas')
}

 

3 „Gefällt mir“