方法名称必须以 findBy 或 findOneBy 开头!错误
The method name must start with either findBy or findOneBy! error
我有一个 table 与 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 有关。
但是我不确定我应该指向哪个存储库。 THERE 下没有 Repository class
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;
顺便说一句,我的第一个代码只显示 select 图片框(媒体)
select图片不够用,
select图片有没有更合适table的方法?
看错误,createQuery
方法不存在
如果您看一下 EntityRepository
class,您会发现正确的方法是 createQueryBuilder()
。
如果您查看该方法的内容,您会发现它 returns 一个 QueryBuilder
实例,其中已经包含正确的 select from
语句,因为您应该得到正确的由于您在 class
选项中传递了实体的 class,因此您的媒体实体的存储库来自 Entity
表单类型。
您已将 $er 定义为 $this->getDoctrine()->getRepository('Application\Sonata\MediaBundle\Entity:Media')
,即 EntityRepository。您需要的是 $this->getDoctrine()->getManager()
的 EntityManager,然后使用代码段中的 select 语句。希望对您有所帮助!
我有一个 table 与 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 有关。
但是我不确定我应该指向哪个存储库。 THERE 下没有 Repository class
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;
顺便说一句,我的第一个代码只显示 select 图片框(媒体)
select图片不够用, select图片有没有更合适table的方法?
看错误,createQuery
方法不存在
如果您看一下 EntityRepository
class,您会发现正确的方法是 createQueryBuilder()
。
如果您查看该方法的内容,您会发现它 returns 一个 QueryBuilder
实例,其中已经包含正确的 select from
语句,因为您应该得到正确的由于您在 class
选项中传递了实体的 class,因此您的媒体实体的存储库来自 Entity
表单类型。
您已将 $er 定义为 $this->getDoctrine()->getRepository('Application\Sonata\MediaBundle\Entity:Media')
,即 EntityRepository。您需要的是 $this->getDoctrine()->getManager()
的 EntityManager,然后使用代码段中的 select 语句。希望对您有所帮助!