Я использую symfony и внутри контроллера пытаюсь вернуть набор записей, используя диапазон (rangeUpper, rangeLower).
Я передаю параметры в объекте запроса в порядке. Но когда я собираюсь маршрутизировать контроллер и пытаюсь получить доступ к классу репозитория, я в недоумении. Мой репозиторий выглядит так:
public function findAllByParams (Request $request)
{
$criteria = $request->query->get('uniflytebundle_material-stock_select');
$criteria = ($request->get('materialId') == 0 ? [] : ['materialId' => $request->get('materialId')]);
$criteria = array_merge(($request->get('gaugeId') == 0 ? [] : ['gaugeId' => $request->get('gaugeId')]), $criteria);
$criteria = array_merge(($request->get('rangeUpper') == 0 ? [] : ['rangeUpper' => $request->get('rangeUpper')]), $criteria);
$criteria = array_merge(($request->get('rangeLower') == 0 ? [] : ['rangeLower' => $request->get('rangeLower')]), $criteria);
$criteria = array_filter($criteria);
$query = $this->createQueryBuilder('ms');
if (!empty($criteria)) {
if (!empty($criteria['materialId']) && !empty($criteria['gaugeId']) && !empty($criteria['rangeUpper']) && !empty($criteria['rangeLower'])) {
$query
->where('ms.material = :materialId')
->andWhere('ms.gauge = :gaugeId')
->andWhere('ms.widthDecimal <= :upperIdentifier')
->andWhere('ms.widthDecimal >= :lowerIdentifier')
->setParameter('materialId', $criteria['materialId'])
->setParameter('gaugeId', $criteria['gaugeId'])
->setParameter('upperIdentifier', $criteria['rangeUpper'])
->setParameter('lowerIdentifier', $criteria['rangeLower'])
;
}
}
$query->orderBy('ms.widthDecimal', 'DESC');
return $query->getQuery()->getResult();
}
Мой текущий контроллер выглядит как
public function selectStripWidthAction (Request $request)
{
$em = $this->getDoctrine()->getManager();
$materialId = $request->get('materialId');
$gaugeId = $request->get('gaugeId');
$materialStocks = $em->getRepository('UniflyteBundle:MaterialStock')->findAllByParams($request);
return $this->render('materialstock/dialog/select.html.twig', [
'MaterialStocks' => $materialStocks,
]);
}
В репозитории у меня есть настройка запроса для приема и запроса по диапазону. Как передать объект запроса и получить набор результатов из репозитория? Вызов FindAllByParams в контроллере не работает.
Undefined method 'findAllByParams'. The method name must start with either findBy or findOneBy!
Заранее благодарим за ваше время и усилия.




Убедитесь, что ваш MaterialStock имеет аннотацию для репозитория.
<?php
namespace UniflyteBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* MaterialStock
*
* @ORM\Table(name = "material_stock")
* @ORM\Entity(repositoryClass = "UniflyteBundle\Repository\MaterialStockRepository")
*/
class MaterialStock{
// [...]
}
Это именно то, чего мне не хватало. Спасибо.