DAL search bringt keine Ergebnisse

Hallo,

das  Beispiel mit DBAL liefert Ergebnisse:

/**
 * @var EntityRepository $repo
 */
$repo = $this->container->get('ws_calendar_user_groups.repository');
$dbal = $this->container->get(Connection::class);
$builder = $dbal->createQueryBuilder();
$builder->select(['cal.id', 'cal.customer_id'])
    ->from('ws_calendar_user_groups', 'cal')
    ->where('cal.customer_id IN(:id)');
$builder->setParameter(':id', hex2bin($customerIds[0]));
$stmt = $builder->execute();
$data = $stmt->fetchAll(\PDO::FETCH_ASSOC);
if (!empty($data)) {
    foreach ($data as $key => $val) {
        foreach ($val as $iKey => $iVal) {
            $data[$key][$iKey] = bin2hex($iVal);
        }
    }
}
var_dump($data);

Während hingegen das hier keine Ergebnisse zurück liefert:

$criteria = new Criteria($customerIds);
$event = $repo->search($criteria,\Shopware\Core\Framework\Context::createDefaultContext());
$collection = $event->getEntities();
var_dump($collection);

Es ist im Prinzip das selbe Beispiel wie hier: Shopware 6: Reading entities via DAL

Bitte verratet mir, was ich bei der DAL Version falsch gemacht habe.

MFG

derwunner

Hi derwunner,

die Variable „$customerIds“ enthält auch CustomerIds und nicht die Ids der „CalenderUserGroup“-Entity, oder?
Somit sucht das DAL nach den IDs im Repository. Wenn du auf einen anderen Wert filtern möchtest, muss du einen EqualsAny-Filter hinzufügen und dort die CustomerIds abfragen. Dein Fall wäre somit ähnlich wie der letzte Teil der Doku („Reading entities without ID“).

Ich hoffe dies Hilft dir weiter.

Gruß

Krispin

Hallo @Krispin‍,

ja da habe ich den Zusammehang nicht gesehen. Aber so komnt es auch leer zurück:

$criteria = new Criteria();
$criteria->addFilter(
    new EqualsAnyFilter('customerId', $customerIds)
);
$event = $repo->search($criteria, \Shopware\Core\Framework\Context::createDefaultContext());
$collection = $event->getEntities();
var_dump($collection);
die('test');

Ich nehme an, dass EqualsAnyFilter das DAL Pendant zu

WHERE customer_id IN(...)

ist, richtig? Ich habe jedenfalls keinen anderen Filter gefunden.

Hi derwunner,

genau, der EqualsAnyFilter ist im DAL so zu sagen der IN-Operator aus SQL.
Bei deiner Query wäre die Frage: Heißt die Spalte in der DAL-Definition aus so “customerId” und wie sind die UUIDs in “$customerIds” auch in Hex?

Gruß

Krispin

@Krispin schrieb:

Bei deiner Query wäre die Frage: Heißt die Spalte in der DAL-Definition aus so „customerId“ und wie sind die UUIDs in „$customerIds“ auch in Hex?

Naja, in der Datenbank BINARY(16), wie überall anders auch. Ich dachte das kann Shopware automatisch umwandeln, wenn man den die Hex Werte gibt? Zum Umwandeln selbst habe ich bisher PHP’s Funktionen hex2bin und bin2hex verwendet, weil Uuid aus DAL auch nichts anderes macht.

Hi derwunner,

Hexwerte sind auch richtig, wollte nur sicher gehen, das du dort Hex übergibst und nicht Binary (Wichtig hierbei ist, dass das Hex in LowerCase sein muss, aber das sollte ja bei bin2hex der Fall sein).

Gruß

Krispin