У меня есть таблица, которая имеет связь с Application \ соната \ MediaBundle \ Entity \ Media (SonataMediaBundle Entity) в качестве 'средства массовой информации'Имя метода должно начинаться с findBy или findOneBy! Ошибка
Обычно я могу сделать форму для средств массовой информации, как это ниже,
$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!
Я нашел некоторые articles и понял, что это связано с Repository. Но я не уверен, какой репозиторий я должен указать. Там нет Repository класса под 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;
Кстати, мой первый код показывает только поле выбора снимков (медиа)
Это не является достаточно полезным для выбора снимков, Есть ли более подходящий способ выбора изображений?
Поиск в папке проекта с ключевым словом MediaRepository. Когда вы обнаружите, что это пространство имен и введите его. –