Hey Zusammen,
ich versuche gerade das Backendbestellungsplugin GitHub - shopwareLabs/SwagBackendOrder: plugin which allows you to create orders via backend module mal wieder etwas anzupassen. Ich möchte die Suche erweitern um die Möglichkeit auch nachdem Hersteller zu suchen.
Hierfür habe ich den getProductQueryBuilder etwas angepasst. Und einen weiteren Join auf den Hersteller mitaufgenommen.
/**
* @param string $search
* @param string $groupKey
* @return \Doctrine\ORM\QueryBuilder|\Shopware\Components\Model\QueryBuilder
*/
public function getProductQueryBuilder($search, $groupKey = 'EK')
{
$builder = $this->modelManager->createQueryBuilder();
/**
* query to search for article variants or the article ordernumber
* the query concats the article name and the additional text field for the search
*/
$builder->select(
'articles.id AS articleId,
details.number,
articles.name,
details.id,
details.inStock,
articles.taxId,
prices.price,
details.additionalText,
tax.tax,
articles.supplierId,
sp.id'
);
$builder->from(Article::class, 'articles')
->leftJoin('articles.details', 'details')
->leftJoin('details.prices', 'prices')
->leftJoin('articles.tax', 'tax')
->leftJoin(
Supplier::class,
'sp',
Expr\Join::WITH,
'articles.supplierId = sp.id'
)
->where(
$builder->expr()->like(
$builder->expr()->concat(
'articles.name',
$builder->expr()->concat(
$builder->expr()->literal(' '),
'details.additionalText'
)
),
$builder->expr()->literal($search)
)
)
->orWhere('details.number LIKE :number')
->orWhere('sp.name LIKE :number')
->andWhere('articles.active = 1')
->andWhere('prices.customerGroupKey = :groupkey')
->setParameter('number', $search)
->setParameter('groupkey', $groupKey)
->orderBy('details.number')
->groupBy('details.number')
->setMaxResults(20);
//Log the current query
Shopware()->PluginLogger()->info($builder->getQuery()->getSQL());
return $builder;
}
Laut Logging klappt das auch meine Query enthält alle erwarteten Elemente.
Dennoch zeigt mir die SearchBox wesentlich weniger Elemente an. Ich finde aktuell keine Möglichkeit herauszufinden, in welcher JS das Eindampfen der Liste stattfindet. Hier bekomme ich nämlich nur 2 Elemente angezeigt.
Hat hier eventuell jemand eine Idee für mich?
Liebe Grüße
Kevin