0

我目前在我自己的自定义非 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 数据库类并将共享数据库中的表名列表存储到 L4config/database.php文件中?

编辑:

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

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

1 回答 1

0

您可以尝试在 Laravel 3 中运行的 Phill Sparks 的这个解决方案。

在 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'   => '',
    )
于 2013-04-23T20:46:44.423 回答