2013-07-02 1 views
0

아마도 내 질문에 부분적으로 stackoverflow의 다른 위치에서 응답 된 것 같지만 모든 질문을 통해보다 포괄적 인 대답을 얻을 수 있다고 생각했습니다. 함께. 나는 멍청한 것에 대해 사과합니다. PHP에서 거의 작동하지 않습니다. 그렇게 할 때, 나는 다시 한번이 모든 것을 배우는 것처럼 느낍니다.데이터베이스에서 PHP 클래스 개체로드 - 모범 사례, 데이터베이스 핸들 등

어쨌든, 다음 열이있는 "항목"이라는 mysql 데이터베이스 테이블을 가지고 있다고 가정 해 봅시다 : item_id, item_type, item_name. 그리고는 다음과 같습니다 PHP 클래스를 가지고있다 : 즉

class Item 
{ 
    public $item_id; 
    public $item_type; 
    public $item_name; 
} 

, 나는 정말 클래스 객체에 대한 데이터베이스에서 직접지도를합니다.

"load"라는 클래스에 item_id과 함께 제공되는 항목 데이터를 가져 오는 메소드를 포함하기로 결정했습니다. 그래서 내 두 가지 질문이 있습니다 :

  1. 클래스 내에서 데이터베이스에 연결하는 가장 좋은 방법은 무엇입니까? 클래스 내에서 새 PDO 객체를 인스턴스화해야합니까, 아니면 PDO 데이터베이스 핸들을 load 메서드의 매개 변수로 전달해야합니까? 그게 그렇게 중요한 건가?
  2. 이 클래스의 속성을 할당하는 방법으로 어떤 의미가 있는가, 또는 거기에이 작업을 수행하려면 훨씬 현명한 방법입니다

    $sth = $dbh->query("SELECT * FROM items WHERE item_id = $item_id"); 
    $sth->setFetchMode(PDO::FETCH_CLASS, 'Item'); 
    while ($obj = $sth->fetch()) { 
        foreach ($obj as $key => $value) { 
         $this->$key = $value; 
        } 
    } 
    

편집 : 내가 이런 반응을보고 난 후에 실현 (재미있는 독서를 위해, 확실하게한다), 나는 아마 충분한 세부로 가지 않았다.

ORM 라이브러리를 사용하면 내가하고있는 일 (개인 취미 프로젝트 - 고용주에게는 도움이되지 않음)에 과잉이라고 생각할 수 있지만 실제로는 필요한 것이 무엇인지 확실하지 않습니다. 이유가 여기 있습니다. 내가 이런 식으로 할 수도 있기 때문에 :

class InventoryItem extends Item 
{ 
    public $user_id; 
    public $quantity; 
} 

나는 이것을 정말로 생각하지 않았다. 예를 든다. 내가 제대로 클래스에 대한 데이터를 꺼내 것이다 SQL 문을 작성해야 할 것, 즉

SELECT * 
FROM items, inventories 
WHERE item.item_id = inventories.item_id 
AND user_id = $user_id; 

및 I : 그래서 쿼리는이 같은 보일 수있는 데이터를 가져 오기 위해 사용하십시오 실제로 데이터베이스 핸들을 전달하거나 load 메소드 내에서 생성해야하는지, 그리고 위의 코드가 속성 값을 할당하는 좋은 방법으로 이해해야 하는지를 알아야합니다.

데이터의 일부를 조작해야하는 경우가 있습니다 (예 : 열 중 하나에 json으로 인코딩 된 배열 등이 저장되어있는 경우).

+1

행 데이터 게이트웨이 및 활성 레코드를 검색하십시오. 일시적으로 http://stackoverflow.com/questions/2296338/oop-design-how-to-incorporate-db-handling-into-application-objects의 사본입니다. 내 투표가 구속력이 있기 때문에 나는 그것을 던지지 않을 것이다. – Gordon

+0

활성 레코드 유형 패턴 인 https://en.wikipedia.org/wiki/Active_record_pattern처럼 보입니다. phpactiverecord를 사용 하시겠습니까? http://www.phpactiverecord.org/ – Nanne

+0

[좋은 PHP ORM 라이브러리?] (http://stackoverflow.com/questions/108699/good-php-orm-library) 중복 가능 –

답변

0

오브젝트 관계형 맵퍼 (orm)를 찾고 있습니다. 이것은 데이터베이스 테이블에 매핑되는 객체를 정의 할 수있게 해주는 라이브러리입니다.

Doctrine은 PHP의 기본 ORM 인 것으로 보입니다. others도 있습니다.

+0

감사합니다. 꽤 흥미롭고 확실히 내가 읽을 필요가있는 무엇인가. 하지만 내 질문을 편집해야만했는데, 예를 지나치게 단순화 한 것으로 생각하고 필요를 충분히 설명하지 못했을 것입니다. – thewatcheruatu

1

나는 일반적인 데이터베이스 개체 클래스를 사용하고 각 개체 클래스 (데이터베이스의 다른 테이블과 일치 함)를 확장합니다.

데이터베이스 개체 클래스에는 행을 개체로 인스턴스화하고 모든 클래스를 수행하는 함수가 들어 있으며 클래스를 확장하는 클래스는 각 테이블 개체의 특성 만 포함합니다.

이것은 프로그래머, 스탁 익스체인지에 관해서는 질문이 많으므로 잘 물어볼 수 있습니다. 그리고이 문제에 관해 의견을 나눌 수있는 여러 가지 방법이 있다고 상상해보십시오.

+0

응답 해 주셔서 감사합니다. 당신이 옳을 수도 있습니다 - 아마도 나는 잘못된 방법으로 이것을 물었습니다. 나의 방법이 잘 작동했기 때문에 나는 좋은 방법이라고 확신하지 못합니다. – thewatcheruatu

관련 문제