yeroon/doctrine-fictures-extra-bundle

添加一个命令,用于验证、删除和创建模式以及一次性加载固定数据。

0.1.2 2014-11-06 20:01 UTC

This package is auto-updated.

Last update: 2024-09-17 23:00:05 UTC


README

Yeroon Doctrine Fixtures Extra Bundle 向您的 Symfony 应用程序添加了一个命令,用于一次性重建数据库模式并加载固定数据。运行时,它会

  • 验证您的模式(doctrine:schema:validate
  • 当验证通过时,删除数据库(doctrine:database:drop
  • 重新创建数据库(doctrine:database:create
  • 重建模式(doctrine:schema:update
  • 最后加载您的固定数据(doctrine:fixtures:load

这样,只需要一个命令就可以重新创建包含您 dev 环境数据的最新数据库。其他环境也受支持,但不太推荐(数据丢失)。

功能

  • 支持多个实体管理器。
  • 事件驱动。可以附加事件监听器以扩展功能(见 '事件')。
  • 当您的模式无效时,将中断。
  • 建立在现有的 Doctrine 命令之上。
  • 通过额外的命令支持 Doctrine MongoDB ODM。
  • 支持 Doctrine MongoDB ODM 的多个文档管理器。

依赖项

  • DoctrineBundle
  • DoctrineFixturesBundle

安装

1. 将 yeroon/doctrine-fixtures-extra-bundle 添加到您的 composer.json 中

"require": {
    ...
    "yeroon/doctrine-fixtures-extra-bundle": "~0.1.*",
}

2. 将 DoctrineFixturesExtraBundle 添加到您的 AppKernel 中

// app/AppKernel.php
public function registerBundles()
{
    if (in_array($this->getEnvironment(), array('dev', 'test'))) {
        // ..
        $bundles[] = new Yeroon\Bundle\DoctrineFixturesExtraBundle\YeroonDoctrineFixturesExtraBundle();
    }
}

上面的示例仅在 devtest 环境中添加了 Bundle(推荐)。

事件

该命令触发六个事件。事件的顺序如下

示例

示例 1:标准行为

以下是命令的示例输出

$ php app/console yeroon:doctrine:fixtures:rebuildandload
WARNING! You are about to drop the database(s) and rebuild the schema(s). ALL data will be lost. Are you sure you wish to continue? (y/n)y
[Mapping]  OK - The mapping files are correct.
[Database] OK - The database schema is in sync with the mapping files.
Dropped database for connection named `my_database`
Created database for connection named `my_database`
Updating database schema...
Database schema updated successfully! "5" queries were executed
  > purging database
  > loading Productr\Bundle\CatalogBundle\DataFixtures\ORM\ExampleFixtureLoader

它首先询问您是否要继续。如果回答是,它将使用 doctrine:schema:validate 命令检查当前的映射是否与数据库一致。如果不一致,命令将中断。如果一致,命令将使用 doctrine:database:dropdoctrine:database:create 命令删除整个数据库并重新创建它。完成此操作后,将执行 doctrine:schema:update 命令来创建模式。最后,将通过 doctrine:fixtures:load 加载您的固定数据。现在您有一个与模式同步且包含固定数据的数据库!

示例 2:附加事件监听器以清理 Solr 索引并插入新数据

此示例展示了如何附加事件监听器以从 Solr 核心中删除数据,并在加载固定数据时插入新数据。

编写自定义事件监听器以删除 Solr 文档

// file: src/Acme/YourBundle/EventListener/SolrPurgeEventListener.php
<?php

namespace Acme/YourBundle/EventListener;

use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Solarium\Client;

class SolrPurgeEventListener {

    protected $client;

    public function __construct(Client $client){
        $this->client = $client;
    }

    public function onExecute(ConsoleCommandEvent $event){
        $update = $this->client->createUpdate();
        $update->addDeleteQuery('*:*');
        $update->addCommit();
        $client->update($update);
    }
}

注册事件监听器

// file: src/Acme/YourBundle/Resources/config/services.xml
<service id="acme_your.event_listener.solr_purge" class="Acme/YourBundle/EventListener/SolrPurgeEventListener">
    <tag name="kernel.event_listener" event="yeroon.doctrine_fixtures_extra.on_drop_database" method="onExecute" />
</service>

这将删除在数据库删除时从您的 Solr 核心中删除所有文档。

编写自定义事件监听器以从您的实体中加载固定数据到您的 Solr 核心中

// file: src/Acme/YourBundle/EventListener/SolrLoadDocumentsEventListener.php
<?php

namespace Acme/YourBundle/EventListener;

use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Solarium\Client;

class SolrLoadDocumentsEventListener {

    protected $manager;

    public function __construct(SomeManager $manager){
        $this->manager = $manager;
    }

    public function onExecute(ConsoleCommandEvent $event){

        //execute some manager
        $manager->loadDocumentsIntoSolr();
    }
}

注册另一个事件监听器

// file: src/Acme/YourBundle/Resources/config/services.xml
<service id="acme_your.event_listener.solr_load_documents" class="Acme/YourBundle/EventListener/SolrLoadDocumentsEventListener">
    <tag name="kernel.event_listener" event="yeroon.doctrine_fixtures_extra.on_load_fixtures" method="onExecute" />
</service>

Doctrine MongoDB ODM 支持

该 Bundle 添加了一个额外的命令(yeroon:doctrine:mongodb:fixtures:rebuildandload),该命令重建您的 MongoDB 数据库和集合。同时加载固定数据。