yeroon / doctrine-fictures-extra-bundle
添加一个命令,用于验证、删除和创建模式以及一次性加载固定数据。
Requires
- php: ~5.4
- doctrine/doctrine-bundle: ~1.2
- doctrine/doctrine-fixtures-bundle: ~2.2
- symfony/symfony: ~2.4
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();
}
}
上面的示例仅在 dev
和 test
环境中添加了 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:drop
和 doctrine: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 数据库和集合。同时加载固定数据。