2013-09-21 3 views
0

PHP에서 MVC를 배우고 데이터베이스 액세스를 위해 PDO를 사용하고 있습니다.PHP MVC PDO 다중 데이터베이스

내 데이터베이스 클래스는 다음과 같이 (I 데이터베이스 변수에 대한 설정 파일에 DEFINE 사용)입니다 :

class Database extends PDO { 

    public function __construct($dbconn ="mysql") { 

     $options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING); 

     switch($dbconn) { 
      case 'usados': 
       parent::__construct(DB_TYPE_USADOS . ':host=' . DB_HOST_USADOS . ';dbname=' . DB_NAME_USADOS, DB_USER_USADOS, DB_PASS_USADOS, $options); 
       break; 

      case 'autos': 
       parent::__construct(DB_TYPE_AUTOS . ':host=' . DB_HOST_AUTOS . ';dbname=' . DB_NAME_AUTOS, DB_USER_AUTOS, DB_PASS_AUTOS, $options); 
       break; 

      case 'servicos': 
       parent::__construct(DB_TYPE_SERVICOS . ':host=' . DB_HOST_SERVICOS . ';dbname=' . DB_NAME_SERVICOS, DB_USER_SERVICOS, DB_PASS_SERVICOS, $options); 
       break; 

      default: 
       parent::__construct(DB_TYPE_MYSQL . ':host=' . DB_HOST_MYSQL . ';dbname=' . DB_NAME_MYSQL, DB_USER_MYSQL, DB_PASS_MYSQL, $options); 
       break; 
     } 
    } 
} 

그리고 예를 들어 모델에서, 내가 가진 :

class Note_Model extends Model { 

    public $errors = array(); 

    public function __construct() { 
     parent::__construct($dbconn="mysql"); 
    } 

    public function getAllNotes() { 
     $sth = $this->db->prepare("SELECT user_id, note_id, note_text 
            FROM note 
            WHERE user_id = :user_id ;"); 
     $sth->execute(array(':user_id' => $_SESSION['user_id']));  

     return $sth->fetchAll(); 
    } 
} 

나는이 개 질문이 :

  1. 내 데이터베이스 클래스에서 다른 데이터베이스 연결에 대한 내 접근 방식입니다 (다른 m 알았지? 이 상황에서 스위치 구조가 잘 사용되고 어디에서 연결될 변수가 있습니까?

  2. 다른 모델의 다른 데이터베이스에 연결할 수 있지만 필요한 경우 동일한 모델의 다른 데이터베이스에서 데이터를 가져 오는 방법은 무엇입니까? 예를 들어, 여러 출처의 정보를 보여주는 대시 보드에 말하십시오. 그건 단지 $ this-> db가 아니죠?

고맙습니다.

+1

FYI, OOP에서'extends' 키워드는 ** IS A **와 동의어입니다. * "Note_Model"은 PDO *라고 확신합니까? 또한 MVC의 모델은 계층이며 ** 클래스가 아닙니다 **. –

+0

안녕하세요! 그래서 "Note_Model"이 필요하다면 모델이되어서는 안 될까요? 그러면 그것을 레이어로 만들려면 어떻게해야합니까? – mjpramos

답변

1

생성자의 switch 문은 클래스가 너무 많이 수행하고 있음을 나타내는 코드 냄새입니다. 나는 4 개의 클래스 (PDO 나 자신의 기본 클래스를 확장)를 만들어 대신 사용할 것이다.

모델에 관해서는 MVC 전문가가 아니지만 같은 서버에 있으면 다른 데이터베이스의 테이블에 조인 할 수 있다는 것을 알고 있습니다. 그러나 이는 클래스 당 하나의 데이터베이스 규칙을 위반하는 '보스'클래스로 이어질 수 있습니다. 가장 좋은 방법은 아마도 데이터에 필요한 모델을 묻는 다른 클래스를 작성한 다음 함께 모으는 것입니다.

+0

안녕하세요! 조지, 고마워. 제 두 번째 질문에 대한 귀하의 접근 방식은 무엇입니까? – mjpramos

+0

흠. 내 편집을 참조하십시오. –