Symfony 3.4尝试调用类“ AppBundle \ Entity \ User”的名为“ createQueryBuilder”的未定义方法

时间:2018-12-14 11:56:49

标签: symfony many-to-many

我用symfony生成了实体和表单,并试图创建一个简单的表单。但是我遇到了无法解决的错误。

试图调用类“ AppBundle \ Entity \ User”的名为“ createQueryBuilder”的未定义方法。

控制器:

public function groupedit(Request $request) {
    $group = new Group();
    $form = $this->createForm(GroupType::class, $group);

    $form->handleRequest($request);

    return $this->render(
                    'form.html.twig', array('form', $form->createView())
    );
}

用户YML

AppBundle\Entity\User:
  type: entity
  repositoryClass: User
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    xxx
  manyToMany:
    mailForwarder:
      targetEntity: AppBundle\Entity\MailForwarder
      inversedBy: user
      joinTable:
        name: MailForwarderHasUser
        joinColumns:
          user_id:
            referencedColumnName: id
            nullable: false
        inverseJoinColumns:
          mail_forwarder_id:
            referencedColumnName: id
            nullable: false
    group:
      targetEntity: AppBundle\Entity\Group
      mappedBy: user

YML组

AppBundle\Entity\Group:
  type: entity
  repositoryClass: AppBundle\Entity\Group
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    xx
  oneToMany:
    sharedMailbox:
      targetEntity: AppBundle\Entity\SharedMailbox
      mappedBy: group
  manyToMany:
    user:
      targetEntity: AppBundle\Entity\User
      inversedBy: group
      joinTable:
        name: UserHasGroup
        joinColumns:
          group_id:
            referencedColumnName: id
            nullable: false
        inverseJoinColumns:
          user_id:
            referencedColumnName: id
            nullable: false

用户实体

class User implements UserInterface, \Serializable
{

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $mailForwarder;

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $group;

    xxx

    /**
     * Add mailForwarder
     *
     * @param \AppBundle\Entity\MailForwarder $mailForwarder
     *
     * @return User
     */
    public function addMailForwarder(\AppBundle\Entity\MailForwarder $mailForwarder)
    {
        $this->mailForwarder[] = $mailForwarder;

        return $this;
    }

    /**
     * Remove mailForwarder
     *
     * @param \AppBundle\Entity\MailForwarder $mailForwarder
     */
    public function removeMailForwarder(\AppBundle\Entity\MailForwarder $mailForwarder)
    {
        $this->mailForwarder->removeElement($mailForwarder);
    }

    /**
     * Get mailForwarder
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getMailForwarder()
    {
        return $this->mailForwarder;
    }

    /**
     * Add group
     *
     * @param \AppBundle\Entity\Group $group
     *
     * @return User
     */
    public function addGroup(\AppBundle\Entity\Group $group)
    {
        $this->group[] = $group;

        return $this;
    }

    /**
     * Remove group
     *
     * @param \AppBundle\Entity\Group $group
     */
    public function removeGroup(\AppBundle\Entity\Group $group)
    {
        $this->group->removeElement($group);
    }

    /**
     * Get group
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getGroup()
    {
        return $this->group;
    }
}

组实体

class Group
{

    XXX

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $sharedMailbox;

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    private $user;

    XXX

    /**
     * Add sharedMailbox
     *
     * @param \AppBundle\Entity\SharedMailbox $sharedMailbox
     *
     * @return Group
     */
    public function addSharedMailbox(\AppBundle\Entity\SharedMailbox $sharedMailbox)
    {
        $this->sharedMailbox[] = $sharedMailbox;

        return $this;
    }

    /**
     * Remove sharedMailbox
     *
     * @param \AppBundle\Entity\SharedMailbox $sharedMailbox
     */
    public function removeSharedMailbox(\AppBundle\Entity\SharedMailbox $sharedMailbox)
    {
        $this->sharedMailbox->removeElement($sharedMailbox);
    }

    /**
     * Get sharedMailbox
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getSharedMailbox()
    {
        return $this->sharedMailbox;
    }

    /**
     * Add user
     *
     * @param \AppBundle\Entity\User $user
     *
     * @return Group
     */
    public function addUser(\AppBundle\Entity\User $user)
    {
        $this->user[] = $user;

        return $this;
    }

    /**
     * Remove user
     *
     * @param \AppBundle\Entity\User $user
     */
    public function removeUser(\AppBundle\Entity\User $user)
    {
        $this->user->removeElement($user);
    }

    /**
     * Get user
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getUser()
    {
        return $this->user;
    }
}

组表单类型

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class GroupType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')->add('systemgroup')->add('user');
    }/**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Group'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_group';
    }


}

有人知道问题出在哪里吗?

最诚挚的问候,

亚历克斯

1 个答案:

答案 0 :(得分:3)

问题似乎出在您声明的实体映射中

repositoryClass: User

您应该传递有效的Doctrine存储库类而不是实体类。

因此,如果不需要自定义存储库功能,则从映射中删除repositoryClass或创建一个有效的类,该类应类似于以下内容:

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    // your custom repository functions here
}

然后进行适当的映射

repositoryClass: AppBundle\Repository\UserRepository