2013-12-16 7 views
0

나는 postgres-db를 사용하는 Laravel 4 프로젝트에서 작업하고 있습니다. 공개 스키마는 관리자의 기본 스키마입니다. 다른 모든 사용자 정의 스키마는 클라이언트 용입니다. 모든 스키마에는 동일한 테이블 설정이 있습니다.Laravel 4, 여러 postgresql-schemas에서 데이터 검색

그러나 일부 클라이언트의 경우 데이터 여러 스키마를 검색해야합니다. L4에서도 가능합니까? 또는 사용자 지정 쿼리를 작성해야합니까?

다음은 DB-연결

'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에서 뭔가를 놓치거나 이런 일이 가능하지 않습니까?

미리 감사드립니다.

답변

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'; 

을 모델에 .

+0

감사에 대한 당신의 대답,하지만 하나의 쿼리에서 여러 스키마의 레코드를 얻을 수 있다면 좋겠다. 그러나 약간의 연구 후에, 나는 그것이 가능하지 않다는 것을 알아 냈다. 또는 나는 틀린가? –

+0

하나의 스키마와 동일한 방식으로 모델에 관계를 정의 할 수 있어야합니다. (이 작업은 효과가 있으며 작동합니다.) Eloquent를 사용하여 데이터를 쿼리합니다. 유창한 쿼리 빌더는 같은 방식으로 작동해야합니다. 위의 테이블을 정의했는지 확인하십시오. – adam

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 |