/** * @param DataMapper $mapper * @param callable $filter * @return \Doctrine\ORM\Query */ public function queryStockItems(DataMapper $mapper, callable $filter = null) { $this->assert($mapper->getEntityClass() == StockItem::class); $builder = $mapper->select(); $builder->addSelect('st, su, uu'); $builder->leftJoin('sti.type', 'st'); $builder->leftJoin('sti.storage_unit', 'su'); $builder->leftJoin('sti.usage_unit', 'uu'); if ($filter) { $filter($builder); } return $builder->getQuery(); }