Doctrine - 为什么orm :: schema-tool只适用于某些实体但不适用于其他实体

时间:2016-11-20 23:40:52

标签: php entity-framework orm doctrine-orm

我安装了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忽略了。事实上,它看起来只是处理一个文件,而忽略了其余的文件。继承我的实体文件夹中的文件: enter image description here

看起来它只处理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"

enter image description here

当我运行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命令,它工作正常: enter image description here

所以这个实体文件有效:

http://pastebin.com/L2zum1Z7

但是这个没有:

http://pastebin.com/hurz6cTi

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

我不知道最近发生了什么。有没有办法验证实体文件,看它是否格式正确?

0 个答案:

没有答案