ホームページ PHPフレームワーク ThinkPHP ThinkPHP: モデル用の 3 つの強力なツールのうちの 2 番目 (修飾子)

ThinkPHP: モデル用の 3 つの強力なツールのうちの 2 番目 (修飾子)

Dec 16, 2019 pm 05:01 PM
thinkphp 修飾子 モデル

ThinkPHP: モデル用の 3 つの強力なツールのうちの 2 番目 (修飾子)

モディファイアはモデルの三大「ツール」の一つですが、今回はモディファイアの使い方と注意点をまとめます。

モディファイアの定義

モディファイアの機能は、モデル オブジェクト データがデータベースに書き込まれる前に、必要なデータ処理を実行することです。モディファイアの標準定義は、

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;
ログイン後にコピー

として記述しないでください。モデルの内部属性との混同、予見される結果。

特定のモディファイアの他のフィールドを変更する可能性がある場合は、追加で変更する必要があるフィールド モディファイアが割り当てられている (またはそのモディファイアがトリガーされている) 必要があることに注意してください。

呼び出し方法

修飾子メソッドは、定義仕様に従って定義されると、手動で呼び出す必要はなく、システムが自動的に呼び出します。次の状況:

·モデル オブジェクトの割り当て;

·データ メソッドを呼び出します。モデル、2 番目のパラメーターは true で渡されます;

# ·モデルの save メソッドを呼び出し、配列データを渡します;

·モデルの setAttr メソッドを明示的に呼び出します。

· このフィールドの自動補完を定義します。

たとえば、User モデルは setPasswordAttr 変更デバイス メソッドを定義します。

public function setPasswordAttr($value, $data)
{
    return md5($value);
}
ログイン後にコピー

次のように使用すると、データベースに保存されるパスワードフィールドの値は、md5('think') 以降の値になります。

$user = User::get(1);
$user->password = 'think';
$user->save();
ログイン後にコピー

修飾子を使用したくないが、場合によってはデータを手動で制御したい場合は、次の方法を試すことができます。

$user = User::get(1);
$user->data('password', md5('think'));
$user->save();
ログイン後にコピー

現時点ではモディファイアによって処理されません。

競合の回避#​​##多くの開発者は、修飾子のオートコンプリート auto (挿入と更新を含む) を定義することを好みます。

protected $auto = ['password'];
ログイン後にコピー

これは、一見賢いように見えますが、V5.1.27 より前の非常に致命的な間違いです。以前に指定したモディファイアのトリガー条件に従って、モディファイアが 2 回実行されることになるため、これを避けるようにしてください。これは致命的なエラーとなり、すべてのユーザーが登録後に正常にログインできなくなります。

解決策値が割り当てられるたびに修飾子が自動的にトリガーされるため、パスワード フィールドの自動補完設定をキャンセルします。割り当てがない場合は、パスワードが変更されていないことを意味します。自動完了はありません。

オートコンプリート フィールドは通常、フォームにないフィールドであり、通常はシステムによって自動的に処理されるフィールドです。

V5.1.27 バージョンではこの問題が改善され、すべてのモディファイアは 1 回のみ実行できるようになり、上記の問題はなくなりました。しかし、これにより新たな問題が発生したようです。モデルのイベントでデータを変更する必要が生じることがよくあります。

User::beforeUpdate(function($user) {
    $user->password = md5('think');
});
ログイン後にコピー

モデルの beforeUpdate イベントでは、データの値を変更できないことがわかります。その理由は、モデルのモディファイアが最初の割り当て中に実行され、2 番目の割り当て中に実行されているためです。無効です (再度実行されません)。

解決策は、前に述べたように、データ割り当て操作の修飾子を呼び出さずに data メソッドを使用することです。

User::beforeUpdate(function($user) {
    $user->data('password', md5('think'));
});
ログイン後にコピー

もちろん、より良い提案は、修飾子、オートコンプリート、およびモデル イベントのデータ処理メカニズムを計画することです。フィールドのデータを同時に変更するために複数のメカニズムを使用しないでください。データ変更操作は、このメソッドを通じて実行されます。

型の自動変換

修飾子がデータの型変換のみを実行する場合は、修飾子を定義する必要はなく、フィールドの型を直接定義するだけです。

public function setScoreAttr($value, $data)
{
    return (float) $score;
}
ログイン後にコピー

上記の修飾子メソッドは、

protected $type = [
    'score'    =>    'float',
];
ログイン後にコピー

に直接変更できます。修飾子とフィールドの型を同時に定義した場合、修飾子が優先されます。

型定義は単純なデータ型を定義するだけでなく、追加の用途もあります。たとえば、json 型、配列型、オブジェクト型は JSON シリアル化され、シリアル化型はデータをシリアル化します。

PHP 中国語 Web サイトには、無料の

ThinkPHP 入門チュートリアル

が多数あり、誰でも学習することができます。 この記事は https://blog.thinkphp.cn/817548

から転載しています。

以上がThinkPHP: モデル用の 3 つの強力なツールのうちの 2 番目 (修飾子)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

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

従来のコンピューティングを超える能力を備えているだけでなく、より低コストでより効率的なパフォーマンスを実現する人工知能モデルを想像してみてください。これは SF ではありません。世界で最も強力なオープンソース MoE モデルである DeepSeek-V2[1] が登場しました。 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 は正式に電動ロボットの時代に突入します!昨日、油圧式アトラスが歴史の舞台から「涙ながらに」撤退したばかりですが、今日、ボストン・ダイナミクスは電動式アトラスが稼働することを発表しました。ボストン・ダイナミクス社は商用人型ロボットの分野でテスラ社と競争する決意を持っているようだ。新しいビデオが公開されてから、わずか 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 はコルモゴロフ-アーノルド表現定理に基づいているのと同様に、強力な数学的基礎を持っています。以下の図に示すように、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

テスラのロボット「オプティマス」の最新映像が公開され、すでに工場内で稼働可能となっている。通常の速度では、バッテリー(テスラの4680バッテリー)を次のように分類します:公式は、20倍の速度でどのように見えるかも公開しました - 小さな「ワークステーション」上で、ピッキング、ピッキング、ピッキング:今回は、それがリリースされたハイライトの1つビデオの内容は、オプティマスが工場内でこの作業を完全に自律的に行​​い、プロセス全体を通じて人間の介入なしに完了するというものです。そして、オプティマスの観点から見ると、自動エラー修正に重点を置いて、曲がったバッテリーを拾い上げたり配置したりすることもできます。オプティマスのハンドについては、NVIDIA の科学者ジム ファン氏が高く評価しました。オプティマスのハンドは、世界の 5 本指ロボットの 1 つです。最も器用。その手は触覚だけではありません

FisheyeDetNet: 魚眼カメラに基づいた最初のターゲット検出アルゴリズム FisheyeDetNet: 魚眼カメラに基づいた最初のターゲット検出アルゴリズム Apr 26, 2024 am 11:37 AM

目標検出は自動運転システムにおいて比較的成熟した問題であり、その中でも歩行者検出は最も初期に導入されたアルゴリズムの 1 つです。ほとんどの論文では非常に包括的な研究が行われています。ただし、サラウンドビューに魚眼カメラを使用した距離認識については、あまり研究されていません。放射状の歪みが大きいため、標準のバウンディング ボックス表現を魚眼カメラに実装するのは困難です。上記の説明を軽減するために、拡張バウンディング ボックス、楕円、および一般的な多角形の設計を極/角度表現に探索し、これらの表現を分析するためのインスタンス セグメンテーション mIOU メトリックを定義します。提案された多角形モデルの FisheyeDetNet は、他のモデルよりも優れたパフォーマンスを示し、同時に自動運転用の Valeo 魚眼カメラ データセットで 49.5% の mAP を達成しました。

thinkphpの実行方法 thinkphpの実行方法 Apr 09, 2024 pm 05:39 PM

ThinkPHP フレームワークをローカルで実行する手順: ThinkPHP フレームワークをローカル ディレクトリにダウンロードして解凍します。 ThinkPHP ルート ディレクトリを指す仮想ホスト (オプション) を作成します。データベース接続パラメータを構成します。 Webサーバーを起動します。 ThinkPHP アプリケーションを初期化します。 ThinkPHP アプリケーションの URL にアクセスして実行します。

Llama 70B を実行するシングル カードはデュアル カードより高速、Microsoft は FP6 を A100 オープンソースに強制導入 Llama 70B を実行するシングル カードはデュアル カードより高速、Microsoft は FP6 を A100 オープンソースに強制導入 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 倍になります。 1つ

See all articles