小编mce*_*cek的帖子

如何更改数据库或使用同一 Bookshelf 实例连接到多个数据库?

考虑到每个应用程序启动一个书架实例的惯例[下面的示例],应该如何更改数据库[下面的用例]?

或者是同时启动具有与多个数据库的不同连接的多个书架实例的唯一可能的解决方法?

使用案例

例如,一个简单的 CMS 应用程序,用于提供多个博客。所有博客和所有内容都遵循相同的架构,具有相同的模型等,只有子域/目录和相应的数据库不同。

通常情况下,Bookshelf 实例是在应用程序处理请求之前启动的,因此,需要动态设置/更改数据库,同时维护其余的连接凭据。

典型设置

app.js

 module.exports = {
        'database': {
            mysql: {
                client: 'mysql',
                connection: {
                    host     : 'localhost',
                    user     : 'root',
                    password : '',
                    database : 'db',
                    charset  : 'utf8'
              }
          }
       }
    };
Run Code Online (Sandbox Code Playgroud)

bookshelf.js

const config = require('./app.js');
const knex = require('knex')(config.database.mysql);

module.exports = require('bookshelf')(knex);  
Run Code Online (Sandbox Code Playgroud)

bookshelf.js knex.js

5
推荐指数
0
解决办法
770
查看次数

保存新实体后的Symfony事件监听器

我需要检查实体是否为特定实体的实例,并在保存新实体后做一些事情。类似于cakephp中的afterSave方法。我试过postFlushonFlushpostPersistpostLoad

AppBundle / EventListener / DoSomethingAfterSaveNewEntity.php

namespace AppBundle\EventListener;

use Doctrine\ORM\Event\OnFlushEventArgs;
use AppBundle\Entity\SomeEntity;

class DoSomethingAfterSaveNewEntity 
{
    public function onFlush(OnFlushEventArgs $args)
    {   
        $entity = $args->getEntity();
        $em = $args->getEntityManager();
        $uow = $em->getUnitOfWork();

        if (!$entity instanceof SomeEntity) {
          die('not instance!!!');
        }

        die('post flush!!!');
        $entityManager = $args->getEntityManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

symfony

1
推荐指数
1
解决办法
1851
查看次数

标签 统计

bookshelf.js ×1

knex.js ×1

symfony ×1