Имя метода должно начинаться либо с 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()
а затем используйте оператор выбора, который у вас есть в куске кода. Надеюсь, поможет!