我正在使用Laravel 4开发一个项目,我使用的是postgres-db。 public-schema是admin的主要架构。所有其他自定义模式都适用于客户端。所有模式都具有相同的表设置。
但对于某些客户端,必须检索多个模式的数据。 L4有可能吗?或者我是否必须编写自定义查询?
这些是我对db-connection
的设置'pgsql' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'postgres',
'username' => 'postgres',
'password' => 'root',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public, client1, client2',
),
但是当我正在执行查询时:
$users = Users::all()
**OR**
$users = DB::select(DB::raw('SELECT * FROM client1.users, client2.users'));
我只是从公众中检索用户。 Laravel我有没有想念或不可能这样做?
提前致谢
答案 0 :(得分:1)
与Laravel相当容易。
在你的配置中:
...
'pgsql2' => array(
'driver' => 'pgsql',
'host' => 'localhost',
'database' => 'postgres',
'username' => 'postgres',
'password' => 'root',
'charset' => 'utf8',
'prefix' => '',
'schema' => 'client1',
),
...
在你的模特中:
// Define your second db connection
protected $connection = 'pgsql2';
// Define your table
protected $table = 'users';
如果没有对此进行测试,那么如果不起作用:
// Define your table
protected $table 'client1.users';
在您的模型中。
答案 1 :(得分:1)
您无需在配置中指定其他架构,请将其保留为public
。
你的查询错了 - 就是这样。这应该是这样的:
SELECT * FROM client1.users UNION ALL SELECT * FROM client2.users
此查询将从两个表中选择所有内容。您可以UNION ALL
从表中选择所需数量。
您可能想要确定哪个用户在哪个架构中,因此只需在查询中添加标识符(变量):
SELECT 1 AS s, * FROM client1.users
UNION ALL
SELECT 2 AS s, * FROM client2.users
UNION ALL
SELECT 3 AS s, * FROM client3.users
输出如下:
| s | id | name |
|---|----|--------|
| 1 | 1 | John |
| 1 | 2 | Lucy |
| 2 | 1 | Robert |
| 3 | 1 | Kelly |
| 3 | 2 | Sam |
答案 2 :(得分:0)
您需要使用
'schemas' => 'public, client1, client2'
如果要使用多个架构。
例如,当您使用来自不同架构的过程时。
如果要使用
'schema' => 'public, client1, client2'
它将选择列表中的第一个。