>PHP 프레임워크 >ThinkPHP >thinkphp6 모델이 ID를 반환하지 않습니다

thinkphp6 모델이 ID를 반환하지 않습니다

王林
王林원래의
2023-05-26 11:45:37866검색

오늘 thinkphp6 모델을 사용할 때 문제가 발생했습니다. 즉, 모델이 데이터 생성 시 ID를 반환하지 않았습니다. 이전 개발 경험에서는 후속 작업을 위한 데이터를 생성할 때 ID가 반환되는 경우가 많았기 때문에 매우 혼란스럽습니다. 이번 포스팅에서는 이 문제의 원인을 발견한 방법과 해결 방법을 공유하겠습니다.

먼저 코드를 확인하여 모델 생성 방법을 올바르게 사용하고 있는지 확인했습니다. 내 코드는 다음과 같습니다.

$user = new User();
$user->name = 'John';
$user->email = 'john@example.com';
$user->save();

return $user->id;

이 코드는 새로 생성된 데이터 행의 ID를 반환해야 하는 모델의 save() 메서드를 호출하기 때문에 괜찮아 보일 것입니다. 그러나 코드를 실행하면 반환된 ID가 예상했던 것과는 달리 0이라는 것을 알게 됩니다. 나는 오랫동안 thinkphp 프레임워크를 사용해 왔고 이런 문제를 겪어본 적이 없기 때문에 이것은 나를 매우 혼란스럽게 합니다.

다음으로 모델의 소스 코드, 특히 save() 메서드의 구현을 살펴보았습니다. 모델의 save() 메소드가 create() 메소드를 호출하여 저장하기 전에 새 데이터 행을 생성함으로써 구현되는 것을 발견했습니다.

public function save($data = [], $where = [], $sequence = null)
{
    if ($this->isExists()) {
        return $this->update($data, $where, $sequence);
    } else {
        $result = $this->create($data);
        if ($result) {
            $this->sync($result);
        }
        return $result;
    }
}

데이터가 생성될 때 모델이 create() 메소드를 호출하는 것이 분명합니다. 그런 다음 새로 생성된 데이터 행의 ID를 올바르게 반환하는지 확인하기 위해 create() 메서드의 구현을 확인하겠습니다.

public function create($data = [], $sequence = null)
{
    if (empty($data)) {
        $data = $this->getOriginData();
    }
    $result = $this->db()->insertGetId($data, $sequence);
    if (!empty($result)) {
        $this->exists(true);
        $this->setRawData([], true);
        $this->sync($result);
        $this->trigger('after_create');
        return $result;
    } else {
        return false;
    }
}

create() 메서드의 코드를 주의 깊게 관찰한 결과 실제로 새로 생성된 데이터 행의 ID를 반환하는 것을 발견했습니다. 그렇다면 문제는 무엇입니까?

마지막으로 데이터베이스의 테이블 구조를 확인하고 테이블의 ID 필드가 자동 증가 열로 올바르게 설정되었는지 확인했습니다. 결과적으로 문제는 여기에 있다는 것을 알았습니다. 내 ID 필드가 자동 증가 열로 설정되지 않았습니다.

이 질문은 그 이유가 너무 간단해서 우스꽝스럽고 당혹스럽습니다. 그러나 모델을 사용할 때 데이터베이스 테이블 구조가 올바르게 구성되었는지 주의 깊게 확인해야 한다는 사실도 보여줍니다. 그래야만 모델을 올바르게 사용하고 불필요한 문제를 피할 수 있습니다.

제 경우에는 ID 필드를 자동 증가 열로 설정하고 코드를 다시 실행하여 새로 생성된 데이터 행의 ID를 올바르게 반환했습니다. 이 문제를 해결하고 나서 데이터 생성 시 반환되는 ID 값이 데이터베이스의 컬럼 자동 증가 기능을 기반으로 한다는 사실을 알게 되었습니다.

이 게시물에서는 제가 작은 문제를 발견한 경험을 공유합니다. 이 문제의 근본 원인은 데이터베이스의 테이블 구조가 올바르게 구성되지 않아 모델이 데이터 생성 시 ID를 반환하지 않기 때문입니다. 꼼꼼하게 코드를 확인하고, 모델 소스코드를 살펴보고, 데이터베이스 테이블 구조를 확인하면서 마침내 문제를 해결했습니다. 내 경험이 다른 개발자들이 thinkphp6 프레임워크 모델을 더 잘 이해하고 이 강력한 도구를 사용하여 웹 애플리케이션을 더 잘 개발할 수 있도록 도움이 되기를 바랍니다.

위 내용은 thinkphp6 모델이 ID를 반환하지 않습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.