Alex
Alex

Reputation: 29

Symfony 3.4 Attempted to call an undefined method named "createQueryBuilder" of class "AppBundle\Entity\User"

I generated entities and forms with symfony and tried to create a simple form. But I get an error which I cannot solve.

Attempted to call an undefined method named "createQueryBuilder" of class "AppBundle\Entity\User".

Controller:

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())
    );
}

User 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

Group 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

User Entity

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

Group Entity

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

Group Form Type

<?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';
    }


}

Have someone an idea where the problem is?

Best regards,

Alex

Upvotes: 0

Views: 2497

Answers (1)

DrKey
DrKey

Reputation: 3495

The problems seems to be in your entity mapping where you declare

repositoryClass: User

while you should pass a valid Doctrine repository class instead of your entity class.

So either you remove repositoryClass from mapping if you don't need custom repository functions or create a valid class which should look like the following:

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;

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

and then proper mapping

repositoryClass: AppBundle\Repository\UserRepository

Upvotes: 3

Related Questions