我安装了Doctrine并使用它连接到sqlite数据库。当我运行vendor/bin/doctrine orm:schema-tool:create
时,它会为" some"创建新的数据库表。我的Entity文件夹中的实体。
反方向,这个命令有效:
vendor/bin/doctrine orm:convert-mapping -f --from-database annotation Entity/
它从SQLite数据库中的新数据库表创建了Entity目录中的新实体文件。但是现在我的Entity文件夹中有一个实体,orm :: schema-tool忽略了。事实上,它看起来只是处理一个文件,而忽略了其余的文件。继承我的实体文件夹中的文件:
看起来它只处理Article.php实体文件。下面是我更新架构时会发生什么:
PS C:\wamp64\www\spider\chebi> vendor/bin/doctrine orm:schema-tool:update -- force --dump-sql
DROP INDEX IDX_149CA72E7294869C;
CREATE TEMPORARY TABLE __temp__ArticleAttribute AS SELECT article_id, attribute, value FROM ArticleAttribute;
DROP TABLE ArticleAttribute;
CREATE TABLE ArticleAttribute (article_id INTEGER NOT NULL, attribute VARCHAR(255) NOT NULL COLLATE BINARY, value VARCHA
R(255) NOT NULL COLLATE BINARY, PRIMARY KEY(article_id, attribute), CONSTRAINT FK_149CA72E7294869C FOREIGN KEY (article_
id) REFERENCES Article (id) NOT DEFERRABLE INITIALLY IMMEDIATE);
INSERT INTO ArticleAttribute (article_id, attribute, value) SELECT article_id, attribute, value FROM __temp__ArticleAttribute;
DROP TABLE __temp__ArticleAttribute;
CREATE INDEX IDX_149CA72E7294869C ON ArticleAttribute (article_id);
Updating database schema...
Database schema updated successfully! "7" queries were executed
我试过这个:
orm:generate-entities --generate-annotations="true" Entity/
它基本上只处理Articles文件(其中包含2个实体),并在新的子目录中为每个文件创建一个实体文件:Application/Mode
PS C:\wamp64\www\spider\chebi> vendor/bin/doctrine orm:generate-entities --generate-annotations="true" Entity/
Processing entity "Application\Model\Article"
Processing entity "Application\Model\ArticleAttribute"
Entity classes generated to "C:\wamp64\www\spider\chebi\Entity"
当我运行orm :: info时,它的内容是:
PS C:\wamp64\www\spider\chebi> vendor/bin/doctrine orm:info
Found 2 mapped entities:
[OK] Application\Model\Article
[OK] Application\Model\ArticleAttribute
即使我删除了那个应用程序目录后,它仍然会说这个,我不知道那里发生了什么。orm:clear-cache:metadata
并且还运行了其他两个clear-cache命令(结果和查询),但是它orm :: info仍然将这两个实体列为唯一找到的实体。从哪里获取这些信息?很抱歉在那里进行侧钻,我想知道的主要问题是为什么orm工具忽略了文件夹中的所有其他实体。
这是 Article.php 文件中的内容:
<?php
namespace Application\Model;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @Entity
*/
class Article
{
/** @Id @Column(type="integer") @GeneratedValue */
private $id;
/** @Column(type="string") */
private $title;
/**
* @OneToMany(targetEntity="ArticleAttribute", mappedBy="article", cascade={"ALL"}, indexBy="attribute")
*/
private $attributes;
public function addAttribute($name, $value)
{
$this->attributes[$name] = new ArticleAttribute($name, $value, $this);
}
}
/**
* @Entity
*/
class ArticleAttribute
{
/** @Id @ManyToOne(targetEntity="Article", inversedBy="attributes") */
private $article;
/** @Id @Column(type="string") */
private $attribute;
/** @Column(type="string") */
private $value;
public function __construct($name, $value, $article)
{
$this->attribute = $name;
$this->value = $value;
$this->article = $article;
}
}
并且其中一个文件(Progress.php)忽略了(没有创建数据库表): http://pastebin.com/hurz6cTi
我的 bootstrap.php 文件中有什么内容:
<?php
// bootstrap.php
use Doctrine\ORM\EntityManager,
Doctrine\ORM\Tools\Setup,
Doctrine\Common\ClassLoader,
Doctrine\ORM\ConfiguraDoctrine\ORM\Tools\Setuption,
Doctrine\DBAL\Types\Type,
Doctrine\Common\Cache\ArrayCache,
Doctrine\DBAL\Logging\EchoSqlLogger,
Doctrine\Common\Annotations\AnnotationReader;
require_once "vendor/autoload.php";
// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$paths = array("./Entity");
$db_path = 'C:\\wamp64\\www\\spider\\chebi\\chebi.db';
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
// database configuration parameters
$dbParams = array(
'driver' => 'pdo_sqlite',
'dbname' => 'chebi',
'path' => __DIR__ . '/chebi.db',
);
// obtaining the entity manager
$entityManager = EntityManager::create($dbParams, $config);
更新:我刚刚从Doctrine:Getting Started页面测试了一个实体文件,我创建了Bug.php并运行了create命令,它工作正常:
所以这个实体文件有效:
但是这个没有:
PS C:\wamp64\www\spider\chebi> vendor/bin/doctrine orm:generate-entities --generate-annotations="true" Entity/
Processing entity "Application\Model\Article"
Processing entity "Application\Model\ArticleAttribute"
Processing entity "Bug"
这是信息所说的内容:
PS C:\wamp64\www\spider\chebi> vendor/bin/doctrine orm:info
Found 3 mapped entities:
[OK] Application\Model\Article
[OK] Application\Model\ArticleAttribute
[OK] Bug
我的其他实体文件都没有得到处理。除了Progress.php,我的所有其他实体文件,我使用:
从数据库模式生成它们vendor/bin/doctrine orm:convert-mapping -f --from-database annotation Entity/
以下是一个例子: http://pastebin.com/Mn96JxQT
我不知道最近发生了什么。有没有办法验证实体文件,看它是否格式正确?