简体   繁体   中英

Symfony2 cannot find my doctrine2 entity class in the controller - how to fix?

I'm trying to run a simple SQL statement (something like select * from table) in my Symfony2 controller but it's not working. Somehow Symfony cannot find the class.

some info:

  1. I've tried providing the full namespace + class name and just class name in the FROM clause
  2. I've tried DQL and QueryBuilder (see code below. option1 and option2)
  3. AppKernel is loading my DoctrineBundle. This was already there when I use composer to create my project
  4. I've tried auto_mapping true and false in settings.yml
  5. snippets of my codes are below

error message:

[Semantical Error] line 0, col 14 near 'Job j ORDER BY': Error: Class 'Job' is not defined.
500 Internal Server Error - QueryException
1 linked Exception:

    QueryException »

[2/2] QueryException: [Semantical Error] line 0, col 14 near 'Job j ORDER BY': Error: Class 'Job' is not defined.  +
[1/2] QueryException: SELECT u FROM Job j ORDER BY j.name ASC  + 

settings.yml

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: "%kernel.root_dir%/data/data.db3"
        # path:     "%database_path%"

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
        #auto_mapping: false
        #mappings:
        #    MyAppMyBundle:
        #        type: annotation
        #        dir: Entity/

my controller

<?php

// src/MyApp/MyBundle/Controller/JobsController.php

namespace MyApp\MyBundle\Controller;

use MyApp\MyBundle\Entity\Job;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class JobsController extends Controller {
    public function listAction() {
        $em = $this->getDoctrine()->getEntityManager();
        //$qb = $em->createQueryBuilder();

        //option1
        //$qb   ->select("j")
        //  ->from("Job", "j")
        //  ->orderBy("j.name", "ASC");*/
        //return $this->render('MyBundle:Jobs:list.html.twig', array('jobs' => $qb->getQuery()->getResult()));

        //option2
        $qb = $em->createQuery("SELECT u FROM Job j ORDER BY j.name ASC");
        return $this->render('MyBundle:Jobs:list.html.twig', array('jobs' => $qb->getResult()));
    }
}

my entity class

<?php

// src/MyApp/MyBundle/Entity/Job.php

namespace MyApp\MyBundle\Entity;

use Doctrine\ORM\Mapping;

/**
 * @Mapping\Entity
 * @Mapping\Table(name="jobs")
 */
class Job {
    /**
     * @Mapping\Column(name="job_id", type="integer")
     * @Mapping\Id
     * @Mapping\GeneratedValue(strategy="AUTO")
     */
    protected $jobId;

    /**
     * @Mapping\Column(name="name", type="text")
     */
    protected $name;

    /**
     * @Mapping\Column(name="job_desc", type="text")
     */
    protected $description;

    /**
     * @Mapping\Column(name="personal_req", type="text")
     */
    protected $requirements;

    /**
     * Get jobid
     *
     * @return integer 
     */
    public function getJobId() {
        return $this->applicationId;
    }

    /**
     * Set name
     *
     * @param \text $name
     * @return Job
     */
    public function setName($name) {
        $this->name = $name;

        return $this;
    }
    /**
     * Get name
     *
     * @return text 
     */
    public function getName() {
        return $this->name;
    }

    /**
     * Set description
     *
     * @param \text $description
     * @return Job
     */
    public function setDescription($description) {
        $this->description = $description;

        return $this;
    }
    /**
     * Get description
     *
     * @return text 
     */
    public function getDescription() {
        return $this->description;
    }

    /**
     * Set requirements
     *
     * @param \text $requirements
     * @return Job
     */
    public function setRequirements($requirements) {
        $this->requirements = $requirements;

        return $this;
    }
    /**
     * Get requirements
     *
     * @return text 
     */
    public function getRequirements() {
        return $this->requirements;
    }

}
  1. use the full namespace if you make a query directly with entitymanager or just MyAppMyBundle:Job
  2. be sure that your bundle is present in AppKernel
  3. prefer to use $em->getRepository('MyAppMyBundle:Job')->createQueryBuilder('j') or $em->getRepository('MyAppMyBundle:Job')->findBy(array(),array('name' => 'ASC')
  4. validate your model with php app/console doctrine:mapping:info and php app/console doctrine:schema:validate

Exceptions in symfony are always perfect so keep the focus on what your exception says

verify namespace of entity class. Because no generate error when write wrong namespace, but no find entity

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM