Doctrine Magic Finders не работает правильно - Symfony2

1

Я делал небольшое исследование по Вопросам Доктрины, поскольку мне нужно было получить некоторые результаты на основе двух статей, в данном случае "Тип" и "Клиент". Я читал о Magic Finders на этой странице и использовал эту логику для создания следующего вызова:

$collections = $repo->findByTypeAndClient('collection',$client);

Поскольку в моей таблице есть поля типа type и client. Однако, когда я запускаю скрипт, я получаю следующую ошибку:

Entity 'AppBundle\Entity\CollectionDelivery' не имеет поля 'typeAndClient'. Поэтому вы не можете вызвать 'findByTypeAndClient' в репозитории сущностей

что заставляет меня думать, что я, возможно, сделал что-то неправильно или, может быть, я пропустил что-то очевидное?

Я использую Symfony2 - любая помощь ценится! Спасибо!

  • 0
    В этом случае findByTypeAndClient() должен быть методом вашего CollectionDeliveryRepository.
  • 1
    Конечно, похоже, что это будет работать. Убедитесь, что findByType, а также findByClient работают как положено. Тип зарезервированное слово в MySQL. Это может быть причиной проблемы, хотя это кажется маловероятным из-за вашего сообщения об ошибке.
Показать ещё 2 комментария
Теги:
doctrine2

1 ответ

1

Да, ты сделал что-то неправильно ^^

Магические методы работают только в одном поле вашего объекта. Ты можешь сделать:

$collections = $repo->findByType('collection');

$collections = $repo->findByClient($client);

Но если вам нужна пользовательская находка по типу и клиенту, вы должны добавить метод в свое репо:

public function findByTypeAndClient($type, $client) {
    $qb = $this->createQueryBuilder('c');
    $qb->where('c.type = :type')
       ->where('c.client = :client')
       ->setParameter(':type', $type)
       ->setParameter(':client', $client);
    return $qb->getQuery()->getResult();
}
  • 0
    И Доктрина советует не использовать это, когда у вас есть более одного результата или объекта с отношениями. Но да, вы правы, мы можем сделать это :)
  • 1
    Что ж. Не обращайте внимания на мои предыдущие комментарии. Doctrine 2 не поддерживает предложение And, как Doctrine 1. Хотя вы все равно можете передать массив аргументов в findBy вместо создания собственного репозитория и запроса.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню