"类XXX不是有效实体或映射的超类"使用php app / console时出错

时间:2014-10-02 02:57:03

标签: php symfony doctrine-orm doctrine

我跟着这个Symfony2/Doctrine guide,我来到了需要创建getter / setter的部分。但我坚持这部分:

$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Job

我在网上搜索了可能的解决方案(似乎主要围绕着使用2个星号开始),但无法找到解决方案。

一些信息:

  1. Bundle已正确加载(通过AppKernel.php),因为我有一个测试" hello world"这很有效。
  2. 命名空间路径正确
  3. Job.php存在于右侧文件夹中
  4. 我使用postgres作为我的数据库。我不确定这是否重要。
  5. 我尝试过在模型类中使用和不使用Doctrine \ ORM \ Mapping行(参见下面的代码)
  6. 我不认为我至少根据get_loaded_extensions函数运行加速器 任何想法都会非常有用。
  7. 非常感谢:)

    我的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
    

    Model class

    <?php
    
    // src/MyApp/MyBundle/Model/Job.php
    
    namespace MyApp\MyBundle\Model;
    
    use Doctrine\ORM\Mapping as ORM;
    
    /**
     * MyApp\MyBundle\Model\Job
     *
     * @ORM\Entity
     * @ORM\Table(name="myschema.jobs")
     */
    class Job {
        /**
         * @ORM\Column(name="job_id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $jobid;
    
        /**
         * @ORM\Column(name="name", type="text")
         */
        protected $name;
    
        /**
         * @ORM\Column(name="job_desc", type="text")
         */
        protected $description;
    
        /**
         * @ORM\Column(name="personal_req", type="text")
         */
        protected $requirements;
    }
    

2 个答案:

答案 0 :(得分:1)

你是否使用学说创建了你的实体?我在你的Job.php实体上看到你使用注释作为映射格式。

在错误输出中,它表示学说无法找到任何映射实体。我已经在那里,它通过config.yml的特定配置解决了。

尝试在config.yml上更改此内容

doctrine:
dbal:
    driver:   "%database_driver%"
    #etc

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    auto_mapping: false
    mappings:
        MyAppMyBundle:
            type: annotation #On your case it should be annotation
            dir: Resources/Model/

阅读本文可能有所帮助:

Doctrine Mapping in Symfony2 using YAML

答案 1 :(得分:0)

您是否尝试使用以下控制台命令?

$ php app/console doctrine:generate:entities MyApp/MyBundle/Model

我希望它能奏效。您的实体名称空间与Acme/StoreBundle/Entity/Product不同。您的实体位于Model directory/namespace中,因此您应该使用命令的第一个参数作为有效的namespace。因此,如上所述,跟随cmd会产生错误。

$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product