2014-04-23 1 views
0

저는 Laravel을 처음 사용하고 있으며 40 개가 넘는 별도의 데이터베이스로 제공되는 외부 소스에서 제공 한 데이터를 사용하는 응용 프로그램을 작성 중입니다. 폼 필드의 수를 기반으로 런타임에 쿼리 할 데이터베이스를 선택해야합니다.변수를 사용하여 Laravel에서 데이터베이스 연결 선택

나는이 database.php에서 다중 연결을 생성 한 후 데이터베이스를 선택하기 위해 컨트롤러의 스위치 문을 사용하여 작동시킬 수 있으므로이 같은 같습니다 등등

case "1": 

$data_rows = DB::connection('mysqlxa01')->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

case "2": 

$data_rows = DB::connection('mysqlxa02')->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

하고 있습니다. 열과 쿼리의 이름을 단순화 했으므로이 질문과 관련이 없습니다.

문제는 데이터베이스 연결 이름을 제외하고 동일한 40 가지 'case'문으로 switch 문을 가졌다는 것입니다.

예측 가능한 순서에 따라 이름이 제출 된 양식 데이터에서 필요한 데이터베이스의 이름을 생성 할 수 있으며 데이터베이스 이름을 DB에 전달할 수있는 경우 훨씬 더 깨끗한 것처럼 보입니다. 따라서 변수는 다음과 같을 것입니다.

$data_rows = DB::connection($selected_database)->table('clientdata') 
    ->select('column1', 'column2', 'column3', 'column4') 
    ->where('column5', 'LIKE', "__MN57XX") 
    ->get(); 
    break; 

이렇게하면 'switch'문을 모두 사용할 필요가 없습니다.

이 작업을 수행하려고하면 쿼리가 오류를 반환하지 않지만 $ data_rows 개체는 비어 있습니다. 내가하고 싶은 일이 가능하고 필요에 따라 작동하는 긴 switch 문을 가지고 있어야 할지도 모르겠지만, 원하는대로 할 수 있어야한다고 생각합니다. 나는 그것을 파악할 수 없으며 모든 지침이 매우 도움이 될 것입니다.

+0

확실히 가능해야합니다! – hannesvdvreken

+0

예, 그래야 할 것 같지만 Laravel의 전문가가 아니며 오랫동안 아무 것도하지 않고이 문제를 인터넷 검색하고 있습니다. 다른면에서 Laravel은 당신이 매우 쉽고 깨끗하게 일을하도록 허용하는 것처럼 보이지만 나는 이것을 알아낼 수 없습니다. – George

+0

@ George 더 많은 데이터를 제공 할 수 있습니다. 왜 비어 있니? '$ selected_database'는 어디에서 왔습니까? 코드가 작동해야합니다. – majidarif

답변

0

확인해 주셔서 감사합니다. Laravel을 VM에 설치하여 단순화 된 앱으로 문제를 찾아내는 방법을 결정했으며, 컨트롤러를 다시 만들 때 모든 것이 데이터베이스 이름에 변수를 사용하여 작업했습니다.

그래서 원래 Laravel 인스턴스로 돌아가 VM의 코드를 잘라내어 관련 컨트롤러에 붙여 넣었습니다. 이제 작동합니다.

어딘가에 캐시에 문제가 있거나 어쩌면 임의의 제어 문자 또는 코드에 포함 된 다른 것이 있어야합니다. 어쨌든 이제는 사람들의 시간 낭비에 대해 사과하고 사과합니다.

관련 문제