【问题标题】:Generating Entity Getters and Setters in Symfony / Doctrine ORM在 Symfony / Doctrine ORM 中生成实体获取器和设置器
【发布时间】:2021-05-06 12:04:29
【问题描述】:

我有以下只有属性的 ORM Symfony 实体:

<?php

namespace Evr\HomeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="ev_article")
 * @ORM\Entity
 */
class Article
{
    /**
     *
     * @ORM\Column(name="article_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
     * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
     */
    private $subcategory;


    /**
     * 
     * @ORM\Column(type="string",length=512)
     */
    private $title;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $content;

    /**
     * 
     * @ORM\Column(type="text")
     */
    private $exclusive_content;

    /**
     * 
     * @ORM\Column(type="date")
     */
    private $creation_date;


     /**
     * 
     * @ORM\Column(type="integer")
     */
    private $views;

    /**
     * 
     * @ORM\Column(type="integer")
     */
    private $votes;


}

我想自动生成setter和getter,所以我运行以下命令:

app/console doctrine:generate:entities Evr/HomeBundle/Entity/Article

每次我这样做时,它都会显示以下错误消息:

  [Doctrine\ORM\Mapping\MappingException]
  Class "Evr\HomeBundle\Entity\Article" is not a valid entity or mapped super
   class.



doctrine:generate:entities [--path="..."] [--no-backup] name

我不知道为什么它不生成实体,是实体/注释有问题吗?

【问题讨论】:

    标签: symfony annotations doctrine getter-setter


    【解决方案1】:

    试试:

    php app/console doctrine:generate:entities EvrHomeBundle:Article
    

    如果您使用的是 symfony 3.0 或更高版本,请使用 bin 替换应用程序:

    php bin/console doctrine:generate:entities EvrHomeBundle:Article
    

    如果你使用的是 symfony 4+ 那么:

    php bin/console make:entity --regenerate 
    

    【讨论】:

    • 我试过了,不管用哪个命令,问题依旧。
    • 嗯,我复制/粘贴了您的实体代码并更改了命名空间以适合我的一个项目,并且效果很好。
    • 这真的很奇怪!我有许多其他类与这个实体有关系。像子类别,它又与类别类别有关系
    • 清除缓存并重试。还要检测映射错误执行php app/console doctrine:mapping:info
    • 我清除了缓存,然后重试:但问题仍然存在......当我运行命令 dictionary:mapping:info 时,它显示 1 条消息(找到 1 个映射实体)映射的实体是实体用户...(实际上我在捆绑包中有超过 5 个实体,即使它只显示 1 个映射实体)
    【解决方案2】:
    php bin/console doctrine:generate:entities AppBundle
    

    这将在您的实体文件中自动生成所有必要的 getter 和 setter。

    如果您想具体了解表格,请使用:

    php bin/console doctrine:generate:entities AppBundle:"TABLE_NAME"
    

    用您的表名替换 "TABLE_NAME"

    【讨论】:

    • 非常感谢您花时间添加另一个答案。这个答案也是另一个可行的解决方案,+1 .. 我在 3 年前问过这个问题 :) 最好!
    • 你的解决方案在 Symfony 3.4 上适用于我,你 +1,你能告诉我为什么 Symfony 没有在任何地方记录它吗?
    • @Dung 我不知道 Dung。他们应该诚实。
    【解决方案3】:

    尝试删除此实体并使用下一条命令重新生成它们:

    php app/console doctrine:generate:entity --entity="EvrHomeBundle:Article" --fields="name:string(255) content:text exclusive_content:text creation_date:date views:integer votes:integer"
    

    然后手动添加:

    /**
     * 
     * @ORM\ManyToOne(targetEntity="Subategory",inversedBy="articles")
     * @ORM\JoinColumn(name="subcategory_id",referencedColumnName="id")
     */
    private $subcategory;
    

    【讨论】:

    • 你修改了什么吗?因为即使您进行了修改,问题仍然存在。
    • 我删除了subcategory 注释
    • 好的,我更新了答案,请尝试生成这个实体。这是作品吗?
    • 不,它不会生成 getters-setters... 你说你删除了子类别注释?它仍然存在于答案中
    • 对不起,我没注意,您实际上从所有注释中删除了一个@...这会停用它们
    【解决方案4】:

    映射导入(从数据库)

    php bin/console doctrine:mapping:import 'AppBundle\Entity' yml --path=src/AppBundle/Resources/config/doctrine
    

    从映射生成实体,但没有 getter 和 setter

    php bin/console doctrine:mapping:convert annotation ./src 
    

    使用 getter 和 setter 映射生成实体

    php bin/console doctrine:generate:entities AppBundle/Entity
    

    【讨论】:

    • 谢谢你,这个问题很老了,但你的回答会很有用+1
    【解决方案5】:

    对 ORM 也要小心,要计算生成 getter/setter:

    /**
     * @var date
     *
     * @ORM\Column(name="creation_date", type="date")
    
     */
    

    【讨论】:

    • 非常感谢您花时间添加另一个答案,它也可以+1 :) 我在 3 年前问过这个问题。干杯!
    【解决方案6】:

    认为缺少的 * 是解决方案之一

    但就我而言,在从命令提示符创建实体时,我更喜欢配置格式为 YML,而不是注释。

    现在我正在做的是使用注释给出映射命令,所以它不起作用。

    尝试将 Resources/config/Category.orm.yml 配置为:

    AppBundle\Entity\Category:
        type: entity
        table: null
        repositoryClass: AppBundle\Repository\CategoryRepository
        oneToMany:
            products:
                targetEntity: Product
                mappedBy: Category
    

    并将 Resources/config/Product.orm.yml 更改为:

    AppBundle\Entity\Product:
        type: entity
        table: null
        repositoryClass: AppBundle\Repository\ProductRepository
        manyToOne:
            category:
                targetEntity: Category
                inversedBy: products
                joinColumn:
                    name: category_id
                    referenceColumnName: id
    

    而且我觉得这不是错误,而是更好的理解!

    【讨论】:

    • 非常感谢您花时间研究这个可行的解决方案。 3年前我问过这个问题。祝你好运 ! +1
    【解决方案7】:

    用法:

    orm:generate-entities 目标路径

    控制台示例:

    doctrine orm:generate-entities --generate-annotations="true" destination_path

    来源:http://wildlyinaccurate.com/useful-doctrine-2-console-commands/

    【讨论】:

    • 感谢您添加此工作解决方案,我在 3 年前问过这个问题,再次感谢 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多