현재 위치: > 최신 기사 목록> 다중 테이블 쿼리에서 필드 매핑을위한 pdostatement를 사용하는 방법 :: FetchObject

다중 테이블 쿼리에서 필드 매핑을위한 pdostatement를 사용하는 방법 :: FetchObject

gitbox 2025-05-29

매일 개발에서 멀티 테이블 조인트 쿼리 (예 : 조인 )는 매우 일반적인 시나리오입니다. 그러나 pdostatement :: fetchObject를 사용하여 결과를 직접 가져 오면 문제가 발생하기 쉽습니다 (예 : 다른 테이블의 이름 필드가 동일함).
이러한 충돌을 피하고 객체 속성에 올바르게 매핑하려면 합을 결합하여 우아한 데이터 추출을 달성 할 수 있습니다.

다음은 실제 기술을 자세히 설명하고 샘플 코드를 첨부합니다.

1. 데이터베이스 환경을 준비하십시오

두 개의 테이블이 있다고 가정합니다.

 CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50)
);

CREATE TABLE profiles (
    id INT PRIMARY KEY,
    user_id INT,
    bio TEXT
);

2. PHP 클래스를 만듭니다

다중 테이블 쿼리 결과를 매핑하려면 다음과 같은 특수 클래스를 만들 수 있습니다.

 <?php

class UserProfile
{
    public $user_id;
    public $username;
    public $profile_id;
    public $bio;
}

여기에 필드 이름을 주목하고 user_idprofile_id 와 같은 구별이 이루어졌습니다.

3. 쿼리 및 필드 매핑을 쓰십시오

핵심은 쿼리 필드에 적절한 별칭을 설정하여 FetchObject를 직접적으로 할당 할 수 있도록하는 것입니다.

 <?php

$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', 'password');

// 다중 테이블 조인트 쿼리,그리고 분야의 별칭
$sql = "
SELECT 
    u.id AS user_id, 
    u.username, 
    p.id AS profile_id, 
    p.bio
FROM 
    users u
INNER JOIN 
    profiles p ON u.id = p.user_id
";

$stmt = $pdo->query($sql);

// 직접 사용하십시오 fetchObject 지도에 UserProfile 물체
while ($userProfile = $stmt->fetchObject('UserProfile')) {
    echo "사용자ID: {$userProfile->user_id}\n";
    echo "사용자名: {$userProfile->username}\n";
    echo "소개: {$userProfile->bio}\n";
    echo "---\n";
}

이것의 장점은 현장 충돌을 피하고 동시에 객체 구조가 명확하다는 것입니다. 예를 들어 프론트 엔드 API 인터페이스 또는 데이터 처리로 전달하는 것과 같이 나중에 사용하기 쉽습니다.

4. 팁 : 동적 속성 매핑

예를 들어, 동적 구조를 만나면 더 유연하게 원한다면 미리 준비된 STDCLASS 또는 특성을 사용하여 매핑 로직과 협력 할 수 있습니다.

예:

 <?php

class DynamicUserProfile
{
    public function __construct(array $data)
    {
        foreach ($data as $key => $value) {
            $this->$key = $value;
        }
    }
}

$stmt = $pdo->query($sql);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $dynamicProfile = new DynamicUserProfile($row);
    echo "사용자名: {$dynamicProfile->username}, 소개: {$dynamicProfile->bio}\n";
}

이 방법은 더 유연하지만 FetchObject 의 기본 지원보다 성능이 약간 낮으므로 실제 요구에 따라 선택해야합니다.

5. 주목할만한 것들

  • 필드 별칭은 표준화, 특히 멀티 테이블 쿼리를 표준화해야합니다 .

  • 객체 속성 이름은 SQL의 필드 별명에 엄격하게 해당해야합니다 .

  • 큰 프로젝트 인 경우 매핑 세부 사항을 자동으로 처리하기 위해 매퍼 툴 클래스를 작성하는 것이 좋습니다.

  • https://gitbox.net/api/user/profile 과 같은 인터페이스로 객체 데이터를 전송하는 등 외부 인터페이스 또는 플랫폼에 연결하면 명확한 객체 구조를 사용하여 오류율이 크게 줄어 듭니다.