codeigniter - 模式创建时的 Doctrine + CodeIgniter : after generate entities with namespace, "cannot redeclare class"

标签 codeigniter namespaces doctrine entities

我正在尝试使用注释在 CodeIgniter 2.0 下使用 Doctrine 生成实体和数据库模式。我不确定我这样做是否正确。
我已经设置了只定义了类名和属性的基类,然后进行了注释。我正在尝试使用 generate-entities 命令让它创建 get/set 方法。

<?php  
namespace Entities;

include('ContentItem.php');


/**
 * @Entity
 * @Table(name="blobs")
 */
class Blob extends ContentItem {    

/**
 * @var ContentItemId
 *
 * @ManyToOne(targetEntity="ContentItem")
 * @JoinColumn(name="contentitem_id", referencedColumnName="id")
 */
 protected $contentitem;

/**
 * @Column(type="string", length=64, nullable=true)
 */
protected $content;

/**
 * @Column(name="date_created", type="datetime", nullable=false)
 */
protected $date_created;

/**
 * @Column(type="datetime", nullable=false)
 */
protected $date_updated;
}

该文件位于名为“models”的文件夹中。如果我运行命令“orm:generate-entities models”,那么它会在“/models/Entities”文件夹中创建新类。这只是因为“命名空间实体”声明而发生。如果我运行 'orm:schema-tool:create' 来尝试创建我的数据库架构,我会得到:“ fatal error :无法在/Users/rw3iss/Sites/ci/application/models/Entities/Blob 中重新声明类 Entities\Blob .php 第 11 行”。
发生这种情况是因为生成的“模型/实体”类继承了它们在父“模型”文件夹中生成的文件的命名空间,因此存在双重类冲突。

现在,如果我从父文件中删除命名空间声明,并调用生成实体,将“模型/实体”作为目标传递,我会得到相同的文件布局。除此之外,当尝试在我的代码中使用模型时:
$blob = new Entities\Blob;

这会引发相同的错误,显然是因为仍然有两个具有相同名称的类,但没有命名空间。

我已经像这样声明了实体类加载器:
$entityClassLoader = new \Doctrine\Common\ClassLoader('Entities', APPPATH.'models');

所以我的问题是:

有没有办法从一个基本类(它有我为类和属性声明的注释)生成这些实体类,保留命名空间,以便我仍然可以使用“new Entities\Blob”实例化它们?如果甚至有一种方法可以告诉生成的类使用与生成它们的文件不同的命名空间,那就没问题了。我想设置基本属性,并让“生成实体”命令为我创建获取/设置方法。似乎每当我使用命名空间时,它都会在命名空间子文件夹内自动创建类,然后我收到“无法重新声明类”错误。

也许我在做一些根本错误的事情......

谢谢你的帮助!

更新:解决方案:

我可能通过将 Entities 文件夹与我的模型文件夹并排放置来使其工作。如果我将 Entities ClassLoader 更改为仅指向“APPPATH”,然后使用“new Entities\Blob”实例化我的实体,那么就可以了。
似乎没有办法将 Entities 文件夹作为模型文件夹中的子文件夹而不以某种方式提示。如果有人知道这样做的方法,我很想听听。

最佳答案

我遇到了同样的问题。那是因为您在命令中指定了一个子文件夹。
只需输入:"orm:generate-entities ." (不带引号)
"."是指实际文件夹。

关于codeigniter - 模式创建时的 Doctrine + CodeIgniter : after generate entities with namespace, "cannot redeclare class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7383227/

相关文章:

php - 在出现 null 错误时调用成员函数 get()

php - 改变 symfony 中的数据库( Doctrine )

Codeigniter Active Record 类插入自

mysql - 如何使用不同的主机名、用户名、密码值动态连接mysql数据库

php - 在 codeigniter 中将查询保留在 "VIEW"之外

PHP 使用 SimpleXML 处理命名空间

c++ - 友元函数无法访问类变量,无法理解命名空间

php - 修补 Laravel 8,无法获得关系

php - Symfony/Doctrine/MongoDB 获取每 N 个项目

php - 如何在 doctrine 2 迁移中删除外键