我有一个与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,我的第一个代码只显示图片的选择框(媒体)
选择图片不够用, 是否有更合适的方式来选择图片?
答案 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语句。希望它有所帮助!