我目前在我自己的自定义非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();
答案 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' => '',
)