方法名称必须以findBy或findOneBy开头!错误

时间:2017-01-31 10:35:28

标签: symfony sonata-media-bundle

我有一个与Application \ Sonata \ MediaBundle \ Entity \ Media(SonataMediaBundle实体)有关系的表作为'media'

通常我可以像下面这样为媒体制作表格,

    $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;

BTW,我的第一个代码只显示图片的选择框(媒体)

选择图片不够用, 是否有更合适的方式来选择图片?

2 个答案:

答案 0 :(得分:1)

查看错误,createQuery方法不存在。

如果您查看EntityRepository课程,您会发现正确的方法是createQueryBuilder()

如果查看方法的内容,您会看到它返回一个QueryBuilder实例已经有正确的select from语句,因为您应该为您的媒体获取正确的存储库您在Entity选项中传递实体的类,因此来自class表单类型的实体。

答案 1 :(得分:-1)

您已将$ er定义为$this->getDoctrine()->getRepository('Application\Sonata\MediaBundle\Entity:Media'),即EntityRepository。你需要的是EntityManager,它是$this->getDoctrine()->getManager(),然后使用你在代码段中的select语句。希望它有所帮助!