Имя метода должно начинаться либо с findBy, либо с findOneBy! ошибка

У меня есть таблица, которая имеет отношение с Application\Sonata\MediaBundle\Entity\Media (SonataMediaBundle Entity) в качестве "медиа"

Обычно я могу сделать форму для СМИ, как это ниже,

    $form = $this->createFormBuilder($myMedia)
    ->add('name')
    ->add('media') // make the selectbox
    ->add('save', SubmitType::class, array('label' => 'Create Post'))
    ->getForm();

Однако я хочу ограничить некоторые средства массовой информации из всех средств массовой информации, тогда я сделал это.

    $form = $this->createFormBuilder($myMedia)
    ->add('name')
    ->add('media','entity',array(
            'class' => "Application\Sonata\MediaBundle\Entity\Media",
            'query_builder' => function(EntityRepository $er) {
                    return $er->createQuery('SELECT r FROM ApplicationSonataMediaBundle:Media');
            }))
    ->add('save', SubmitType::class, array('label' => 'Create Post'))
    ->getForm();

Однако это показывает ошибку, как это.

Undefined method 'createQuery'. The method name must start with either findBy or findOneBy!

Я нашел несколько статей и понял, что это связано с хранилищем. Но я не уверен, какой репозиторий я должен указать. Нет класса репозитория под Sonata\MediaBundle\ или Application\Sonata\MediaBundle

namespace Application\Sonata\MediaBundle\Entity;    
use Sonata\MediaBundle\Entity\BaseMedia as BaseMedia;

@ORM\Entity(repositoryClass="Where is my repository???")

class Media extends BaseMedia
{
    /**
     * @var int $id
     */
    protected $id;

Кстати, мой первый код показывает только поле выбора для картинок (медиа)

Выбор изображений не достаточно полезен. Существует ли более подходящий способ выбора изображений?

2 ответа

Решение

Посмотрите на ошибку, createQuery Метод не существует.

Если вы посмотрите на EntityRepository класс вы увидите, что правильный метод createQueryBuilder(),

Если вы посмотрите на содержимое метода, вы увидите, что он возвращает QueryBuilder пример с уже право select from заявление, так как вы должны получить правильный репозиторий для вашего медиа-объекта от Entity тип формы, так как вы передаете класс вашей сущности в class вариант.

Вы определили $er как $this->getDoctrine()->getRepository('Application\Sonata\MediaBundle\Entity:Media') который является EntityRepository. Что вам нужно, это EntityManager, который $this->getDoctrine()->getManager() а затем используйте оператор выбора, который у вас есть в куске кода. Надеюсь, поможет!

Другие вопросы по тегам