laravel 4上有1个用户的2个数据库

时间:2013-04-23 20:35:46

标签: php mysql laravel laravel-4

我目前在我自己的自定义非laravel网站上使用laravel 3数据库类,但我正在laravel 4上重建该网站。我有2个网站共享包含product表的相同数据库,然后每个站点有自己的数据库用于特定于站点的表,如orders

这是我目前使用laravel 3数据库类的内容。

/**
* /database/connection.php
* Prepend database names onto tables.
*/
private function prepend_database_names($sql)
{
    $tables = array('product', 'product_brand'); // etc...

    if (is_array($tables))
    {   
        foreach($tables as $table)
        {
            $sql = preg_replace("/`$table`/", 'shared_db.`'.$table.'`', $sql);
        }   
    }

    return $sql;
}

// This is put inside the execute function

protected function execute($sql, $bindings = array())
{
    // other code...

    $sql = $this->prepend_database_names($sql);

    // other code...
}

我想做类似的事情但不编辑供应商文件夹中的任何文件。 除非有人知道更好的方法。

我对这方面知之甚少。也许扩展L4数据库类并将共享数据库中的表名列表存储到L4 config/database.php文件中?

修改

下面是一个查询示例。这很好,因为我在产品之前添加了shared.,但我不想每次使用共享数据库中的表时都这样做。

DB::table('searches')
    ->join('shared.product', 'product.id', '=', 'searches.product_id')
    ->get();

1 个答案:

答案 0 :(得分:0)

您可以在Laravel 3中使用Phill Sparks尝试此solution

在Laravel 4中,您可以在app / config / database.php

中编辑连接
// app/config/database.php
'default' => 'first',
'connections' => array(
    'first' => array(
        'driver'   => 'mysql',
        'host'     => 'localhost',
        'database' => 'database1',
        'username' => 'root',
        'password' => '',
        'charset'  => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'   => '',
    ),
   'second' => array(
        'driver'   => 'mysql',
        'host'     => 'localhost',
        'database' => 'database1',
        'username' => 'root',
        'password' => '',
        'charset'  => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'   => '',
    )