CakePHP에서 단일 모델에 대해 여러 데이터베이스에 연결
CakePHP에서 여러 데이터베이스의 데이터를 관리하는 것은 어려운 작업이 될 수 있습니다. 이 질문은 각 사용자가 자신만의 데이터베이스를 갖고 있는 시나리오에 대해 자세히 설명하며, 데이터베이스 이름을 하드 코딩하지 않고 올바른 데이터베이스에 동적으로 연결하는 것이 과제입니다.
사용자별 데이터베이스 분리
사용자 데이터는 법적 및 성능 문제를 해결하기 위해 개별 데이터베이스로 분할됩니다. 각 데이터베이스에는 이 질문과 관련된 "cars" 테이블을 포함하여 여러 테이블이 있습니다.
사용자-데이터베이스 관계
데이터베이스 이름은 다음과 같이 구성됩니다.
데이터베이스-테이블 매핑
제공된 다이어그램은 이 설정에서 데이터베이스와 테이블 간의 관계를 명확하게 보여줍니다.
동적 데이터베이스 연결
문제의 핵심은 로그인하는 사용자를 기준으로 연결할 올바른 데이터베이스를 식별하는 것입니다. 이러한 데이터베이스와 사용자가 동적으로 생성된다는 점을 고려하여 app/Config/database.php 파일을 수정합니다. 불가능합니다.
모델 및 ConnectionManager 확장
CakePHP의 기본 데이터베이스 동작을 우회하기 위해 개발자는 Model 및 ConnectionManager 클래스 확장을 고려했습니다. 그러나 보다 간단한 해결책이 발견되었습니다.
AppModel Extension
최종 해결책은 AppModel.php 파일을 다음과 같이 수정하는 것입니다.
class AppModel extends Model { public function setDatabase($database, $datasource = 'default') { ... (Database configuration logic) ... if ( $ds = ConnectionManager::create($nds, $db->config) ) { ... (Set Model configuration) ... return true; } return false; } }
이 확장은 모델에 대한 데이터베이스 연결을 동적으로 설정하는 기능을 제공합니다.
Controller 예제
CarsController.php 파일에서 setDatabase 메소드를 다음과 같이 활용할 수 있습니다. 다음:
class CarsController extends AppController { public function index() { $this->Car->setDatabase('cake_sandbox_client3'); ... } }
위 내용은 CakePHP는 어떻게 단일 모델에 대해 여러 사용자별 데이터베이스에 동적으로 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!