PHP 프레임워크 ThinkPHP ThinkPHP: 모델을 위한 세 가지 강력한 도구 중 두 번째(수정자)

ThinkPHP: 모델을 위한 세 가지 강력한 도구 중 두 번째(수정자)

Dec 16, 2019 pm 05:01 PM
thinkphp 수정자 모델

ThinkPHP: 모델을 위한 세 가지 강력한 도구 중 두 번째(수정자)

수정자는 모델의 가장 강력한 세 가지 "도구" 중 하나입니다. 이 글에서는 수정자의 사용법과 몇 가지 주의 사항을 요약하겠습니다.

수정자 정의

수정자의 기능은 모델 객체 데이터가 데이터베이스에 기록되기 전에 필요한 데이터 처리를 수행하는 것입니다. 수정자의 표준 정의는 다음과 같습니다.

public function setFieldNameAttr($value, $data)
{
    // 对value值进行处理 data参数是当前全部数据
    // 返回值就是实际要写入数据库的值
    return $value;
}
로그인 후 복사

여기서 FieldName은 데이터 테이블의 field_name 필드(테이블 필드의 데이터 사양과 수정자 메서드는 사양을 정의합니다. 그렇지 않으면 오류가 발생합니다).

각 수식자는 원칙적으로 해당 필드의 데이터만 처리해야 하지만, 필요한 경우 동시에 여러 필드를 처리하는 것도 허용됩니다.

다음은 예시입니다

public function setBirthdayAttr($value, $data)
{
    // 格式化生日数据
    $birthday = strtotime($value);
    // 根据生日判断年龄
    $age = getAgeByBirthday($birthday);
    // 赋值年龄数据
    $this->setAttr('age', $age);
    return $birthday;
}
public function setAgeAttr($value,$data)
{
    return floor($value);
}
로그인 후 복사

setAttr 메소드를 사용하는 이유는 연령 할당 작업이 별도의 수정자를 거칠 수 있도록 하기 위함입니다. 추가 수식어가 없으면

public function setBirthdayAttr($value, $data)
{
    // 格式化生日数据
    $birthday = strtotime($value);
    // 根据生日判断年龄
    $age = getAgeByBirthday($birthday);
    // 赋值年龄数据
    $this->data['age'] = $age;
    return $birthday;
}
로그인 후 복사

로 쓸 수도 있습니다. 모델 내부에 데이터 객체를 할당하면 모델의 내부 속성과 혼동되어 예측할 수 없는 결과가 발생하므로

$this->age = $age;
로그인 후 복사

로 쓰면 안 됩니다. 모델.

특정 수정자에서 다른 필드를 수정할 수 있는 경우 추가로 수정해야 하는 필드 수정자가 할당되어 있어야 함(또는 수정자가 트리거됨)을 기억하세요.

호출 방법

수정자 메소드는 정의 사양에 따라 정의된 후 다음과 같은 상황에서 자동으로 호출됩니다.

·모델 객체

· 모델의 데이터 메소드를 호출하고 두 번째 매개변수로 true를 전달합니다.

·모델의 저장 메소드를 호출하고 배열 데이터를 전달합니다.

모델의 setAttr 메소드를 명시적으로 호출합니다.

·

이 필드의 자동 완성을 정의합니다.

예를 들어, User 모델은 setPasswordAttr 수정자 메소드를 정의합니다.

public function setPasswordAttr($value, $data)
{
    return md5($value);
}
로그인 후 복사
이렇게 사용하면 데이터베이스에 저장된 비밀번호 필드의 값이 md5('생각') 이후의 값이 됩니다.
$user = User::get(1);
$user->password = 'think';
$user->save();
로그인 후 복사

수정자를 사용하고 싶지 않지만 경우에 따라 데이터를 수동으로 제어하고 싶다면 다음 방법을 시도해 볼 수 있습니다.

$user = User::get(1);
$user->data('password', md5('think'));
$user->save();
로그인 후 복사

현재는 수식어로 처리되지 않습니다.

충돌 방지

많은 개발자는 수정자에 대해 자동 완성 자동(삽입 및 업데이트 포함)을 정의하는 것을 좋아합니다.

protected $auto = ['password'];
로그인 후 복사
V5.1.27 이전 버전에서는 영리해 보이지만 매우 치명적인 실수입니다. 이전에 제공한 수정자 트리거 조건에 따라 수정자가 두 번 실행될 수 있으므로 피하세요. 이는 심각한 오류가 발생하여 모든 사용자가 등록 후 정상적으로 로그인할 수 없게 됩니다.

해결책은 값이 할당될 때마다 수정자가 자동으로 실행되므로 비밀번호 필드의 자동 완성 설정을 취소하는 것입니다. 할당이 없으면 비밀번호가 수정되지 않았음을 의미하며 비밀번호가 없습니다. 자동 완성.

자동 완성 필드는 일반적으로 양식에 없는 필드이며 일반적으로 시스템에서 자동으로 처리되는 필드입니다.

V5.1.27 버전에서는 이 문제가 개선되었습니다. 모든 수정자는 한 번만 실행될 수 있으며 위의 문제는 더 이상 존재하지 않습니다. 그러나 이는 새로운 문제를 가져온 것 같습니다. 모델이 발생하면 데이터를 수정하고 싶을 수도 있습니다.

User::beforeUpdate(function($user) {
    $user->password = md5('think');
});
로그인 후 복사

는 모델 beforeUpdate 이벤트에서 데이터 값을 수정할 수 없음을 발견합니다. 그 이유는 모델의 수정자가 첫 번째 할당 중에 실행되었고 두 번째 할당 시 유효하지 않기 때문입니다(아니오가 실행되지 않음). 다시).

해결책은 데이터 할당 작업을 위해 수정자를 호출하지 않고 앞서 언급한 데이터 메서드를 사용하는 것입니다.

User::beforeUpdate(function($user) {
    $user->data('password', md5('think'));
});
로그인 후 복사

물론 더 나은 제안은 수정자, 자동 완성 및 모델 이벤트의 데이터 처리 메커니즘을 계획하는 것입니다. 필드에 대해 동시에 데이터를 수정하기 위해 여러 메커니즘을 사용하지 마십시오. 데이터베이스에 기록된 데이터는 수정자를 통해 작성됩니다.

자동 유형 변환

수정자가 데이터에 대한 유형 변환만 수행하는 경우 수정자를 정의할 필요가 없으며 필드 유형을 직접 정의하면 됩니다.

public function setScoreAttr($value, $data)
{
    return (float) $score;
}
로그인 후 복사
위 수식자 방식은
protected $type = [
    'score'    =>    'float',
];
로그인 후 복사
로 직접 변경할 수 있습니다. 수식자와 필드 유형을 동시에 정의하면 수식자가 우선 적용됩니다.

유형 정의는 간단한 데이터 유형을 정의할 수 있을 뿐만 아니라 몇 가지 추가 용도도 있습니다. 예를 들어 json 유형, 배열 유형 및 객체 유형은 JSON 직렬화되고 직렬화 유형은 데이터를 직렬화합니다.

PHP 중국어 웹사이트에는 무료

ThinkPHP 입문 튜토리얼

이 많이 있습니다. 누구나 배울 수 있습니다!

이 기사는 https://blog.thinkphp.cn/817548

에서 복제되었습니다.

위 내용은 ThinkPHP: 모델을 위한 세 가지 강력한 도구 중 두 번째(수정자)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

세계에서 가장 강력한 오픈 소스 MoE 모델이 여기에 있습니다. 중국의 기능은 GPT-4와 비슷하며 가격은 GPT-4-Turbo의 거의 1%에 불과합니다. 세계에서 가장 강력한 오픈 소스 MoE 모델이 여기에 있습니다. 중국의 기능은 GPT-4와 비슷하며 가격은 GPT-4-Turbo의 거의 1%에 불과합니다. May 07, 2024 pm 04:13 PM

기존 컴퓨팅을 능가할 뿐만 아니라 더 낮은 비용으로 더 효율적인 성능을 달성하는 인공 지능 모델을 상상해 보세요. 이것은 공상과학 소설이 아닙니다. DeepSeek-V2[1], 세계에서 가장 강력한 오픈 소스 MoE 모델이 여기에 있습니다. DeepSeek-V2는 경제적인 훈련과 효율적인 추론이라는 특징을 지닌 전문가(MoE) 언어 모델의 강력한 혼합입니다. 이는 236B 매개변수로 구성되며, 그 중 21B는 각 마커를 활성화하는 데 사용됩니다. DeepSeek67B와 비교하여 DeepSeek-V2는 더 강력한 성능을 제공하는 동시에 훈련 비용을 42.5% 절감하고 KV 캐시를 93.3% 줄이며 최대 생성 처리량을 5.76배로 늘립니다. DeepSeek은 일반 인공지능을 연구하는 회사입니다.

안녕하세요, 일렉트릭 아틀라스입니다! 보스턴 다이나믹스 로봇 부활, 180도 이상한 움직임에 겁먹은 머스크 안녕하세요, 일렉트릭 아틀라스입니다! 보스턴 다이나믹스 로봇 부활, 180도 이상한 움직임에 겁먹은 머스크 Apr 18, 2024 pm 07:58 PM

Boston Dynamics Atlas가 공식적으로 전기 로봇 시대에 돌입했습니다! 어제 유압식 Atlas가 역사의 무대에서 "눈물을 흘리며" 물러났습니다. 오늘 Boston Dynamics는 전기식 Atlas가 작동 중이라고 발표했습니다. 상업용 휴머노이드 로봇 분야에서는 보스턴 다이내믹스가 테슬라와 경쟁하겠다는 각오를 다진 것으로 보인다. 새 영상은 공개된 지 10시간 만에 이미 100만 명이 넘는 조회수를 기록했다. 옛 사람들은 떠나고 새로운 역할이 등장하는 것은 역사적 필연이다. 올해가 휴머노이드 로봇의 폭발적인 해라는 것은 의심의 여지가 없습니다. 네티즌들은 “로봇의 발전으로 올해 개막식도 인간처럼 생겼고, 자유도도 인간보다 훨씬 크다. 그런데 정말 공포영화가 아닌가?”라는 반응을 보였다. 영상 시작 부분에서 아틀라스는 바닥에 등을 대고 가만히 누워 있는 모습입니다. 다음은 입이 떡 벌어지는 내용이다

MLP를 대체하는 KAN은 오픈소스 프로젝트를 통해 컨볼루션으로 확장되었습니다. MLP를 대체하는 KAN은 오픈소스 프로젝트를 통해 컨볼루션으로 확장되었습니다. Jun 01, 2024 pm 10:03 PM

이달 초 MIT와 기타 기관의 연구자들은 MLP에 대한 매우 유망한 대안인 KAN을 제안했습니다. KAN은 정확성과 해석성 측면에서 MLP보다 뛰어납니다. 그리고 매우 적은 수의 매개변수로 더 많은 수의 매개변수를 사용하여 실행되는 MLP보다 성능이 뛰어날 수 있습니다. 예를 들어 저자는 KAN을 사용하여 더 작은 네트워크와 더 높은 수준의 자동화로 DeepMind의 결과를 재현했다고 밝혔습니다. 구체적으로 DeepMind의 MLP에는 약 300,000개의 매개변수가 있는 반면 KAN에는 약 200개의 매개변수만 있습니다. KAN은 MLP와 같이 강력한 수학적 기반을 가지고 있으며, KAN은 Kolmogorov-Arnold 표현 정리를 기반으로 합니다. 아래 그림과 같이 KAN은

thinkphp에는 여러 버전이 있습니다. thinkphp에는 여러 버전이 있습니다. Apr 09, 2024 pm 06:09 PM

ThinkPHP에는 다양한 PHP 버전용으로 설계된 여러 버전이 있습니다. 메이저 버전에는 3.2, 5.0, 5.1, 6.0이 포함되며, 마이너 버전은 버그를 수정하고 새로운 기능을 제공하는 데 사용됩니다. 최신 안정 버전은 ThinkPHP 6.0.16입니다. 버전을 선택할 때 PHP 버전, 기능 요구 사항 및 커뮤니티 지원을 고려하십시오. 최상의 성능과 지원을 위해서는 최신 안정 버전을 사용하는 것이 좋습니다.

공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! 공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! May 06, 2024 pm 04:13 PM

테슬라의 로봇 옵티머스(Optimus)의 최신 영상이 공개됐는데, 이미 공장에서 작동이 가능한 상태다. 정상 속도에서는 배터리(테슬라의 4680 배터리)를 다음과 같이 분류합니다. 공식은 또한 20배 속도로 보이는 모습을 공개했습니다. 작은 "워크스테이션"에서 따고 따고 따고 : 이번에 출시됩니다. 영상에는 옵티머스가 공장에서 이 작업을 전 과정에 걸쳐 사람의 개입 없이 완전히 자율적으로 완료하는 모습이 담겨 있습니다. 그리고 Optimus의 관점에서 보면 자동 오류 수정에 중점을 두고 구부러진 배터리를 집어 넣을 수도 있습니다. NVIDIA 과학자 Jim Fan은 Optimus의 손에 대해 높은 평가를 했습니다. Optimus의 손은 세계의 다섯 손가락 로봇 중 하나입니다. 가장 능숙합니다. 손은 촉각적일 뿐만 아니라

FisheyeDetNet: 어안 카메라를 기반으로 한 최초의 표적 탐지 알고리즘 FisheyeDetNet: 어안 카메라를 기반으로 한 최초의 표적 탐지 알고리즘 Apr 26, 2024 am 11:37 AM

표적 탐지는 자율주행 시스템에서 상대적으로 성숙한 문제이며, 그 중 보행자 탐지는 가장 먼저 배포되는 알고리즘 중 하나입니다. 대부분의 논문에서 매우 포괄적인 연구가 수행되었습니다. 그러나 서라운드 뷰를 위한 어안 카메라를 사용한 거리 인식은 상대적으로 덜 연구되었습니다. 큰 방사형 왜곡으로 인해 표준 경계 상자 표현은 어안 카메라에서 구현하기 어렵습니다. 위의 설명을 완화하기 위해 확장된 경계 상자, 타원 및 일반 다각형 디자인을 극/각 표현으로 탐색하고 인스턴스 분할 mIOU 메트릭을 정의하여 이러한 표현을 분석합니다. 제안된 다각형 형태의 모델 fisheyeDetNet은 다른 모델보다 성능이 뛰어나며 동시에 자율 주행을 위한 Valeo fisheye 카메라 데이터 세트에서 49.5% mAP를 달성합니다.

thinkphp를 실행하는 방법 thinkphp를 실행하는 방법 Apr 09, 2024 pm 05:39 PM

ThinkPHP Framework를 로컬에서 실행하는 단계: ThinkPHP Framework를 로컬 디렉터리에 다운로드하고 압축을 풉니다. ThinkPHP 루트 디렉터리를 가리키는 가상 호스트(선택 사항)를 만듭니다. 데이터베이스 연결 매개변수를 구성합니다. 웹 서버를 시작합니다. ThinkPHP 애플리케이션을 초기화합니다. ThinkPHP 애플리케이션 URL에 접속하여 실행하세요.

단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | 단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | Apr 29, 2024 pm 04:55 PM

FP8 이하의 부동 소수점 수량화 정밀도는 더 이상 H100의 "특허"가 아닙니다! Lao Huang은 모든 사람이 INT8/INT4를 사용하기를 원했고 Microsoft DeepSpeed ​​팀은 NVIDIA의 공식 지원 없이 A100에서 FP6을 실행하기 시작했습니다. 테스트 결과에 따르면 A100에 대한 새로운 방법 TC-FPx의 FP6 양자화는 INT4에 가깝거나 때로는 더 빠르며 후자보다 정확도가 더 높은 것으로 나타났습니다. 또한 오픈 소스로 제공되고 DeepSpeed와 같은 딥 러닝 추론 프레임워크에 통합된 엔드투엔드 대규모 모델 지원도 있습니다. 이 결과는 대형 모델 가속화에도 즉각적인 영향을 미칩니다. 이 프레임워크에서는 단일 카드를 사용하여 Llama를 실행하면 처리량이 듀얼 카드보다 2.65배 더 높습니다. 하나

See all articles