目次
ARDENTのインストールは、作曲家にとって非常に簡単です。プロジェクトのcomposer.jsonファイルに依存関係を追加するだけです。
「通常」の状況では、次のようなものを作ります:
laravel eloquentでAPIリソースを使用するにはどうすればよいですか?
ホームページ バックエンド開発 PHPチュートリアル ARDENT:ステロイドのLaravelモデル

ARDENT:ステロイドのLaravelモデル

Feb 19, 2025 am 09:07 AM

Ardent: Laravel Models on Steroids

ARDENT:ステロイドのLaravelモデル

私がLaravelについて気に入らない(少数の)ことの1つは、検証コードをコントローラーからモデルに簡単に移動できないことです。ソフトウェアを書くとき、私は「脂肪モデル、スキニーコントローラー」の原則を適用するのが好きです。ですから、私にとって、コントローラーに検証コードを書くことは良いことではありません。 これを解決するために、Laravel 4の素晴らしいパッケージであるArdentを紹介したいと思います。より正確には、Ardentは「Laravel Framework 4のEloquent ORMの自己検証スマートモデル」として現れます。言い換えれば、正確に必要なもの!

ご想像のとおり、基本的には雄弁なモデルクラスの拡張です。このパッケージには、入力検証などの新しい機能、ユーティリティ、およびメソッドが付属しています。

キーテイクアウト

強化された検証:ARDENTは、モデル内でルールを直接定義できるようにすることにより、検証プロセスを簡素化し、特に大規模なプロジェクトでコード組織と保守性を向上させます。
    モデルの自動hydrate:この機能は、フォーム入力からモデル属性を自動的に入力し、コントローラーのボイラープレートコードを削減し、コードベースのクリーナーをより効率的にする。
  • モデルフック:ARDENTは、保存、更新、削除、削除などの特定のライフサイクルモーメントで実行されるメソッドであるモデルフックを導入し、データハンドリングをより強く制御します。
  • 単純化された関係:モデル関係を定義することは、単純な配列構造( `$ lelationsData`)を使用して、熱心でより合理化されており、Laravelモデルの関係管理の複雑さを減らします。
  • 自動パージ冗長データ:ARDENTは、確認フィールドやCSRFトークンなどの入力から不要なデータを自動的に破棄し、関連するデータのみが処理および保存されるようにします。
  • 私たちのテストアプリケーション
  • Ardentを使用している間に楽しむことができる利点をよりよく理解するために、少しテストアプリケーションを設定します。複雑なものは何もありません:シンプルなTo Doリストアプリ。
  • もちろん、私は完全なアプリケーションを実装するつもりはありません。いくつかの原則を説明したいので、いくつかのコントローラーとモデルを作成します。ビューはありません。その後、Ardentを使用してコードを「翻訳」します
  • To Doリストは、2つの異なるエンティティをカウントします:

ユーザー

id

first_name

    last_name
  • メール

      パスワード
    • タスク
    • id
    • name
  • ステータス(完了 /完了)
    • 本当に基本的なプロジェクト。ただし、コードを作成したくない場合は、心配しないでください。データベースの生成に使用できる移行をすでに準備しています。使用!
    • コマンドを使用して移行ファイルを作成します
    • そして、このコードでファイルを入力してください:
    • php artisan migrate:make todo_setup
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      テーブルがあります。モデルを作成する時が来ました。ここでも、書くべき行はほとんどありません。これがユーザーモデルです(これもデフォルトのモデルです)。

      <span><span><?php
      </span></span><span>
      </span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
      </span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
      </span></span><span>
      </span><span>    <span>class TodoSetup extends Migration {
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * Run the migrations.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@return <span>void</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>public function up()
      </span></span><span>        <span>{
      </span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
      </span></span><span>            <span>{
      </span></span><span>                <span>$table->increments('id')->unsigned();
      </span></span><span>
      </span><span>                <span>$table->string('first_name');
      </span></span><span>                <span>$table->string('last_name');
      </span></span><span>                <span>$table->string('email');
      </span></span><span>                <span>$table->string('password', 60);
      </span></span><span>
      </span><span>                <span>$table->timestamps();
      </span></span><span>            <span>});
      </span></span><span>
      </span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
      </span></span><span>            <span>{
      </span></span><span>                <span>$table->increments('id');
      </span></span><span>
      </span><span>                <span>$table->string('name');
      </span></span><span>                <span>$table->boolean('status');
      </span></span><span>
      </span><span>                <span>$table->integer('user_id')->unsigned();
      </span></span><span>
      </span><span>                <span>$table->timestamps();
      </span></span><span>
      </span><span>                <span>$table->index('user_id');
      </span></span><span>            <span>});
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * Reverse the migrations.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@return <span>void</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>public function down()
      </span></span><span>        <span>{
      </span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
      </span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      タスクモデルとの関係を説明するタスクメソッドを追加しました。

      出発点を作成しました。これからは、インストールの直後に、2つの異なる状況が表示されます。まず、熱心なコードの「通常の」バージョンです。その後、「改善」バージョンと比較します。あなたは違いに気づくでしょう、私を信じてください。
      <span><span><?php
      </span></span><span>
      </span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
      </span></span><span>
      </span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
      </span></span><span>
      </span><span>        <span>use UserTrait, RemindableTrait;
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * The database table used by the model.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@var <span>string</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>protected $table = 'users';
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * The attributes excluded from the model's JSON form.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@var <span>array</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>protected $hidden = array('password', 'remember_token');
      </span></span><span>
      </span><span>        <span>public function tasks()
      </span></span><span>        <span>{
      </span></span><span>            <span>return $this->hasMany('Task');
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      始めましょう!

      Ardent

      のインストール

      ARDENTのインストールは、作曲家にとって非常に簡単です。プロジェクトのcomposer.jsonファイルに依存関係を追加するだけです。

      その後、更新後、モデルに熱心なクラスを拡張する必要があります。
      <span><span><?php
      </span></span><span>
      </span><span>    <span>class Task extends <span>\Eloquent</span> {
      </span></span><span>        <span>protected $fillable = [];
      </span></span><span>
      </span><span>        <span>public function user()
      </span></span><span>        <span>{
      </span></span><span>            <span>return $this->belongsTo('User');
      </span></span><span>        <span>}
      </span></span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      …そして、あなたは行く準備ができています!

      <span>{
      </span>        <span>"require": {
      </span>            <span>"laravelbook/ardent": "2.*"
      </span>        <span>}
      </span>    <span>}</span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      データ検証

      最初に行うことは、熱心がどのように検証の実装において私たちの生活を容易にするかを分析することです。 Laravelでそれを行う方法をすでに知っています。古典的な例を作成しましょう:フォームから入るデータを処理するPOSTメソッド。

      「通常」の状況では、次のようなものを作ります:

      …アーデントではどうですか?

      熱心で、物事は少し変わります。まず第一に、簡単に想像できるように、検証ルールはモデルに直接移動されます。「Restyle」を開始するのはここにあります。したがって、モデルファイルを開き、そのように変更してください:
      <span><span><?php
      </span></span><span>    <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> {
      </span></span><span>        <span>// model code here!
      </span></span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー

      何が起こったのですか?あまり:モデルのベースクラス(雄弁から熱心に)を変更し、ここで検証ルールをカスタムエラーメッセージで(同じ構文を使用して)移動しました。

      それで、今の質問は次のとおりです。コントローラーに何を書くつもりですか?

      <span><span><?php
      </span></span><span>
      </span><span>    <span>public function postSignup()
      </span></span><span>    <span>{
      </span></span><span>        <span>$rules = array(
      </span></span><span>            <span>'first_name' => 'required',
      </span></span><span>            <span>'last_name' => 'required',
      </span></span><span>            <span>'email' => 'required|email|unique:users',
      </span></span><span>            <span>'password' => 'required|min:8'
      </span></span><span>        <span>);
      </span></span><span>
      </span><span>        <span>$messages = array(
      </span></span><span>            <span>'first_name.required' => 'First name is required.',
      </span></span><span>            <span>'last_name.required' => 'Last name is required.',
      </span></span><span>            <span>'email.required' => 'Email is required.',
      </span></span><span>            <span>'password.required' => 'Password is required.',
      </span></span><span>
      </span><span>            <span>'email.email' => 'Use a real email address!',
      </span></span><span>            <span>'email.unique' => 'This email address already exists!',
      </span></span><span>            <span>'password.min' => 'Password must be at least 8 character long.'
      </span></span><span>        <span>);
      </span></span><span>
      </span><span>        <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages);
      </span></span><span>
      </span><span>        <span>if($validator->fails())
      </span></span><span>        <span>{
      </span></span><span>            <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages());
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>        <span>$user = new User;
      </span></span><span>
      </span><span>        <span>$user->first_name = Input<span>::</span>get('first_name');
      </span></span><span>        <span>$user->last_name = Input<span>::</span>get('last_name');
      </span></span><span>        <span>$user->email = Input<span>::</span>get('email');
      </span></span><span>        <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password'));
      </span></span><span>
      </span><span>        <span>if($user->save())
      </span></span><span>        <span>{
      </span></span><span>            <span>$status = 1;
      </span></span><span>        <span>}
      </span></span><span>        <span>else
      </span></span><span>        <span>{
      </span></span><span>            <span>$status = 0;
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>        <span>return Redirect<span>::</span>to('user/signup')->with('status', $status);
      </span></span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      チェックしてみましょう:

      ここにはこれ以上検証手順はありません。彼らはすべて姿を消した。ただし、「移動」だけではありません。$ user-> save()メソッドは、検証フェーズにいくつかの問題がある場合、falseを返します。次に、$ user-> errors() - > all()メソッドでエラーを取得できます。奇妙なクラスはありません:返されたオブジェクトは、Laravelで作業している間にすでに出会った可能性のある古典的なメッセージバッグです。

      ただし、必要に応じて、$ user-> balidationerrorsプロパティを使用することもできます。その場合、またはフィールド固有のエラーを取得する場合は、$ user-> balidationerrors-> get( 'field_name')を使用してください。

      さて、あなたは「OK、しかし、コードの行が少ないことを超えて、本当の利点は何ですか?」

      最も重要なことから始めましょう。コード組織を改善すると、プロジェクトの保守性が向上します。簡単なアプリケーションでは、優先事項とは感じられませんが、より大きなプロジェクトに関しては、1つの間違った決定を簡単に台無しにすることができます。現実世界の状況の例を作りましょう。私たちは素晴らしいToDoリストアプリケーションを開発しましたが、それは本当に急速に成長しています。モバイルアプリケーションには間違いなくRESTFUL APIが必要です。コントローラーを「通常」の方法で使用することは、APIの別のサインアップルーチンを書き込むことを意味します。同じコードを持つ2つの異なるブロック!これは良くありません。古き良き乾燥(自分自身を繰り返さないでください)の原則はどこですか?

      したがって、ベストプラクティスは、すべてを処理するモデルにsignup()メソッドを作成することです。 Ardentを使用すると、検証から保存手順まで、本当にすべてを処理することを意味します。それがなければ、最初のフェーズを達成することはできませんでした

      2番目の利点は、より実用的なものです。モデルオートhydrateです。一緒に発見しましょう。

      モデル自動hydrate

      postignup()メソッドは、正確に13行のコードをカウントします。たとえ難しいと思われたとしても、熱心はその数をさらに下げることができます。この例をご覧ください:

      php artisan migrate:make todo_setup
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      ここにエラーはありません。あなたはおそらくすでに何が起こったのかをすでに理解しています。

      Ardentには、モデルの自動水和物機能があります。これは、オブジェクトを作成して$ user-> save()メソッドを呼び出すと、すべてのフィールドが入力オブジェクトデータで自動的に満たされることを意味します。もちろん、それに応じてすべてのフォームフィールドで正しい名前を付ける必要があります。

      したがって、このコード:

      <span><span><?php
      </span></span><span>
      </span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
      </span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
      </span></span><span>
      </span><span>    <span>class TodoSetup extends Migration {
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * Run the migrations.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@return <span>void</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>public function up()
      </span></span><span>        <span>{
      </span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
      </span></span><span>            <span>{
      </span></span><span>                <span>$table->increments('id')->unsigned();
      </span></span><span>
      </span><span>                <span>$table->string('first_name');
      </span></span><span>                <span>$table->string('last_name');
      </span></span><span>                <span>$table->string('email');
      </span></span><span>                <span>$table->string('password', 60);
      </span></span><span>
      </span><span>                <span>$table->timestamps();
      </span></span><span>            <span>});
      </span></span><span>
      </span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
      </span></span><span>            <span>{
      </span></span><span>                <span>$table->increments('id');
      </span></span><span>
      </span><span>                <span>$table->string('name');
      </span></span><span>                <span>$table->boolean('status');
      </span></span><span>
      </span><span>                <span>$table->integer('user_id')->unsigned();
      </span></span><span>
      </span><span>                <span>$table->timestamps();
      </span></span><span>
      </span><span>                <span>$table->index('user_id');
      </span></span><span>            <span>});
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * Reverse the migrations.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@return <span>void</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>public function down()
      </span></span><span>        <span>{
      </span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
      </span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      と同じ効果があります

      13行目から、サインアップ手順全体で7回に下ったばかりです。
      <span><span><?php
      </span></span><span>
      </span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
      </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
      </span></span><span>
      </span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
      </span></span><span>
      </span><span>        <span>use UserTrait, RemindableTrait;
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * The database table used by the model.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@var <span>string</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>protected $table = 'users';
      </span></span><span>
      </span><span>        <span>/**
      </span></span><span><span>         * The attributes excluded from the model's JSON form.
      </span></span><span><span>         *
      </span></span><span><span>         * <span>@var <span>array</span>
      </span></span></span><span><span>         */
      </span></span><span>        <span>protected $hidden = array('password', 'remember_token');
      </span></span><span>
      </span><span>        <span>public function tasks()
      </span></span><span>        <span>{
      </span></span><span>            <span>return $this->hasMany('Task');
      </span></span><span>        <span>}
      </span></span><span>
      </span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      この機能を使用するには、アクティブ化する必要があります。このように、モデルの$ autohydrateEntityFromInputをTrueに切り替えるだけです。

      done!

      また、ビジネスロジックには必要ない冗長なデータがあることがよくあります。 _confirmationフィールドまたはCSRFトークンについて考えてください。さて、モデルの$ autopurgeredundantattributesプロパティでそれらを捨てることができます。前と同じように、それをtrueに切り替えてください。

      <span><span><?php
      </span></span><span>
      </span><span>    <span>class Task extends <span>\Eloquent</span> {
      </span></span><span>        <span>protected $fillable = [];
      </span></span><span>
      </span><span>        <span>public function user()
      </span></span><span>        <span>{
      </span></span><span>            <span>return $this->belongsTo('User');
      </span></span><span>        <span>}
      </span></span><span>    <span>}</span></span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー

      今では、手順は以前よりもきれいです。

      モデルフック

      <span>{
      </span>        <span>"require": {
      </span>            <span>"laravelbook/ardent": "2.*"
      </span>        <span>}
      </span>    <span>}</span>
      ログイン後にコピー
      ログイン後にコピー
      ログイン後にコピー
      言及する価値のあるもう1つの良い機能は、モデルフックの導入です。それらは、本質的に、実装された場合、特定の実行モーメントで呼び出される方法のリストです。したがって、例を作成するために、aghtupdate()メソッドは、すべての更新()呼び出しの前に呼び出されます。前のValidate()メソッドは、すべての検証の前に呼び出されます。

      これらすべての方法のリストを次に示します

      • beforecreate()
      • abhercreate()
      • beforesave()
      • abhersave()
      • befored
    • afthupdate()
    • beforedelete()
    • afterdelete()
    • beforevalidate()
    • aftervalidate()
    古典的な例は、保存手順の前にデータの詳細を強化する可能性があります。このように:

    php artisan migrate:make todo_setup
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    すべての「前」メソッドにはブールリターン値があります。 Trueの場合、次の操作が正常に実行されます。メソッドがfalseを返すと、操作は停止します。上記の方法では、検証の直後に、beforesave()メソッドでナメクジを生成しました(および適切なフィールドを埋めます)。

    beforesave()とabhersave()についての特定のヒントもあります。実行時に宣言できます。見てください:

    アプリケーションでのこれらのメソッドのいくつかの可能な用途について考えてみましょう。
    <span><span><?php
    </span></span><span>
    </span><span>    <span>use Illuminate<span>\Database\Schema\Blueprint</span>;
    </span></span><span>    <span>use Illuminate<span>\Database\Migrations\Migration</span>;
    </span></span><span>
    </span><span>    <span>class TodoSetup extends Migration {
    </span></span><span>
    </span><span>        <span>/**
    </span></span><span><span>         * Run the migrations.
    </span></span><span><span>         *
    </span></span><span><span>         * <span>@return <span>void</span>
    </span></span></span><span><span>         */
    </span></span><span>        <span>public function up()
    </span></span><span>        <span>{
    </span></span><span>            <span>Schema<span>::</span>create('users', function(Blueprint $table)
    </span></span><span>            <span>{
    </span></span><span>                <span>$table->increments('id')->unsigned();
    </span></span><span>
    </span><span>                <span>$table->string('first_name');
    </span></span><span>                <span>$table->string('last_name');
    </span></span><span>                <span>$table->string('email');
    </span></span><span>                <span>$table->string('password', 60);
    </span></span><span>
    </span><span>                <span>$table->timestamps();
    </span></span><span>            <span>});
    </span></span><span>
    </span><span>            <span>Schema<span>::</span>create('tasks', function(Blueprint $table)
    </span></span><span>            <span>{
    </span></span><span>                <span>$table->increments('id');
    </span></span><span>
    </span><span>                <span>$table->string('name');
    </span></span><span>                <span>$table->boolean('status');
    </span></span><span>
    </span><span>                <span>$table->integer('user_id')->unsigned();
    </span></span><span>
    </span><span>                <span>$table->timestamps();
    </span></span><span>
    </span><span>                <span>$table->index('user_id');
    </span></span><span>            <span>});
    </span></span><span>        <span>}
    </span></span><span>
    </span><span>        <span>/**
    </span></span><span><span>         * Reverse the migrations.
    </span></span><span><span>         *
    </span></span><span><span>         * <span>@return <span>void</span>
    </span></span></span><span><span>         */
    </span></span><span>        <span>public function down()
    </span></span><span>        <span>{
    </span></span><span>            <span>Schema<span>::</span>dropIfExists('users');
    </span></span><span>            <span>Schema<span>::</span>dropIfExists('tasks');
    </span></span><span>        <span>}
    </span></span><span>
    </span><span>    <span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    たぶん、パスワードハッシュを処理するbeforesave()?

    ユーザーが手順を削除する直前に

    またはクリーニングフック?
    <span><span><?php
    </span></span><span>
    </span><span>    <span>use Illuminate<span>\Auth\UserTrait</span>;
    </span></span><span>    <span>use Illuminate<span>\Auth\UserInterface</span>;
    </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableTrait</span>;
    </span></span><span>    <span>use Illuminate<span>\Auth\Reminders\RemindableInterface</span>;
    </span></span><span>
    </span><span>    <span>class User extends Eloquent implements UserInterface, RemindableInterface {
    </span></span><span>
    </span><span>        <span>use UserTrait, RemindableTrait;
    </span></span><span>
    </span><span>        <span>/**
    </span></span><span><span>         * The database table used by the model.
    </span></span><span><span>         *
    </span></span><span><span>         * <span>@var <span>string</span>
    </span></span></span><span><span>         */
    </span></span><span>        <span>protected $table = 'users';
    </span></span><span>
    </span><span>        <span>/**
    </span></span><span><span>         * The attributes excluded from the model's JSON form.
    </span></span><span><span>         *
    </span></span><span><span>         * <span>@var <span>array</span>
    </span></span></span><span><span>         */
    </span></span><span>        <span>protected $hidden = array('password', 'remember_token');
    </span></span><span>
    </span><span>        <span>public function tasks()
    </span></span><span>        <span>{
    </span></span><span>            <span>return $this->hasMany('Task');
    </span></span><span>        <span>}
    </span></span><span>
    </span><span>    <span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    多くの可能性があります。
    <span><span><?php
    </span></span><span>
    </span><span>    <span>class Task extends <span>\Eloquent</span> {
    </span></span><span>        <span>protected $fillable = [];
    </span></span><span>
    </span><span>        <span>public function user()
    </span></span><span>        <span>{
    </span></span><span>            <span>return $this->belongsTo('User');
    </span></span><span>        <span>}
    </span></span><span>    <span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    関係の定義(熱心な方法)

    熱心では、以前よりも短い方法で関係を定義することもできます。モデル間の関係を実際に定義する方法を見てみましょう。次の例は、ユーザーモデルのtasks()メソッドを示しています。

    ARDENTを使用して関係を定義することは、$ RelationsDataと呼ばれる単純な配列を定義することを意味します。

    <span>{
    </span>        <span>"require": {
    </span>            <span>"laravelbook/ardent": "2.*"
    </span>        <span>}
    </span>    <span>}</span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    これはまったく同じ効果があります。 Ardentは、同じ命名条約を使用して、名前と方法を1つずつ書くことなくバインドします。

    ただし、できることはたくさんあります:

    <span><span><?php
    </span></span><span>    <span>class User extends <span>\LaravelBook\Ardent\Ardent</span> {
    </span></span><span>        <span>// model code here!
    </span></span><span>    <span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー

    $ RelationsDataのすべての要素には、キー(はい、関係のメソッド名)といくつかのパラメーターがある配列があります。

    最初のパラメーター(キーなしで、最初のパラメーター)は、関係タイプ(hasone、hasmany、belongsto、belongstomany、morpho、morphone、morphmany)を説明しています。

    2番目のパラメーター(キーなしで、2番目のパラメーター)は、現在の関係の宛先モデルを定義します。
    <span><span><?php
    </span></span><span>
    </span><span>    <span>public function postSignup()
    </span></span><span>    <span>{
    </span></span><span>        <span>$rules = array(
    </span></span><span>            <span>'first_name' => 'required',
    </span></span><span>            <span>'last_name' => 'required',
    </span></span><span>            <span>'email' => 'required|email|unique:users',
    </span></span><span>            <span>'password' => 'required|min:8'
    </span></span><span>        <span>);
    </span></span><span>
    </span><span>        <span>$messages = array(
    </span></span><span>            <span>'first_name.required' => 'First name is required.',
    </span></span><span>            <span>'last_name.required' => 'Last name is required.',
    </span></span><span>            <span>'email.required' => 'Email is required.',
    </span></span><span>            <span>'password.required' => 'Password is required.',
    </span></span><span>
    </span><span>            <span>'email.email' => 'Use a real email address!',
    </span></span><span>            <span>'email.unique' => 'This email address already exists!',
    </span></span><span>            <span>'password.min' => 'Password must be at least 8 character long.'
    </span></span><span>        <span>);
    </span></span><span>
    </span><span>        <span>$validator = Validator<span>::</span>make(Input<span>::</span>all(), $rules, $messages);
    </span></span><span>
    </span><span>        <span>if($validator->fails())
    </span></span><span>        <span>{
    </span></span><span>            <span>return Redirect<span>::</span>to('user/signup')->with('errors', $validator->messages());
    </span></span><span>        <span>}
    </span></span><span>
    </span><span>        <span>$user = new User;
    </span></span><span>
    </span><span>        <span>$user->first_name = Input<span>::</span>get('first_name');
    </span></span><span>        <span>$user->last_name = Input<span>::</span>get('last_name');
    </span></span><span>        <span>$user->email = Input<span>::</span>get('email');
    </span></span><span>        <span>$user->password = Hash<span>::</span>make(Input<span>::</span>get('password'));
    </span></span><span>
    </span><span>        <span>if($user->save())
    </span></span><span>        <span>{
    </span></span><span>            <span>$status = 1;
    </span></span><span>        <span>}
    </span></span><span>        <span>else
    </span></span><span>        <span>{
    </span></span><span>            <span>$status = 0;
    </span></span><span>        <span>}
    </span></span><span>
    </span><span>        <span>return Redirect<span>::</span>to('user/signup')->with('status', $status);
    </span></span><span>    <span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー
    さらなるパラメーターには特定の位置がありませんが、キーがあります。彼らは次のとおりです:

      foreignkey:オプション、hasone、hasmany、belongsto、およびbelongstomany;
    • に使用されます
    • テーブル、その他のキー、タイムスタンプ、ピボットキー:オプション、belongStomanyに使用;
    • 名前、タイプ、ID:Morphto、Molphone、Morphmanyで使用;

      • 結論
      • 大きな利点(126Kのダウンロードや頻繁な更新)がある大きなパックを使用して、次のアプリで熱心を使用しない理由を見つけることは非常に困難です。あらゆる種類のプロジェクトに適しており、雄弁のモデルの拡張であるため、Laravelプロジェクトとの完全な互換性を実現します。
      • 私は間違いなくそれをお勧めします。あなたは?試してみましたか?以下のコメントでお知らせください!
      • Laravelモデルに関するよくある質問(FAQ)

        Laravel 4.2、5.0、7.x、および10.xの雄弁の重要な違いは何ですか?

        Laravel Eloquentは、バージョン4.2から10.xに大幅に進化しました。 Laravel 4.2では、Eloquentは基本的なCRUD操作を備えた単純なORM(オブジェクトリレーショナルマッピング)でした。 Laravel 5.0は、複数の接続、ソフトデレクト、イベント処理などの新機能を導入しました。 Laravel 7.Xは、熱心な荷重、モデルのシリアル化、およびAPIリソースをもたらしました。 Laravel 10.Xは、パフォーマンスの向上、エラー処理の改善、バッチ操作やモデル工場などの高度な機能により、さらに強化されました。 Laravelに自己検証のスマート雄弁モデルを追加します。属性が保存される前に自動検証を提供するため、コントローラーに記述する必要がある検証コードの量が減ります。 Ardentは、モデルとその関係のネストされたトランザクションセーフの保存もサポートしています。これにより、複雑な保存操作が簡素化されます。

        Laravel Eloquentで複数の接続を使用するにはどうすればよいですか?データベース接続は、config/database.phpファイルでそれらを定義します。次に、雄弁モデルでは、$ connectionプロパティで使用する接続を指定できます。たとえば、保護された$ connection = 'mysql2'; 「mysql2」接続を使用します。

        laravel雄弁さの熱心な読み込みは何ですか?

        熱心な読み込みは、複数のクエリではなく、単一のデータベースクエリに関連データをロードする方法です。これにより、大規模なデータセットを操作するときにパフォーマンスが大幅に向上する可能性があります。 Eloquentでwith()メソッドを使用して、熱心な負荷との関係を指定できます。 '実際にデータベースから削除することなくレコード。代わりに、削除された_ATタイムスタンプが設定されています。 softdeletes特性を使用してテーブルに削除列を追加することにより、雄弁モデルのソフトデレートを有効にすることができます。データベースをテストまたはシードするための新しいモデルインスタンスを生成する便利な方法。モデルのデフォルト属性値を指定するモデルファクトリを定義し、ファクトリーを使用してそれらのデフォルトで新しいインスタンスを作成できます。 > Ardentは、単一のデータベーストランザクションでモデルとその関連するすべてのモデルを保存するSavenested()メソッドを提供します。これにより、すべての節約が成功するか、何もないことを保証し、データの完全性を維持します。

        laravel eloquentでAPIリソースを使用するにはどうすればよいですか?

        laravel eloquentのAPIリソースを使用すると、モデルとモデルコレクションをJSON形式に変換してAPIで使用できます。モデルの変換方法を定義するリソースクラスを作成し、APIルートからそのリソースクラスのインスタンスを返すことができます。保存する前に、モデルで定義された一連のルールに対するモデルの属性。検証が失敗した場合、保存操作が中止され、ERRORS()メソッドを使用して検証エラーが利用可能です。 ()Laravel Eloquentのメソッドは、モデルが「起動」されているとき、つまりメモリにロードされたときに呼び出されるライフサイクルフックです。このメソッドをモデルにオーバーライドして、イベントリスナーの登録やモデルの構成のカスタマイズなど、モデルの起動時に発生する動作を追加できます。

以上がARDENT:ステロイドのLaravelモデルの詳細内容です。詳細については、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 PHPのさまざまなエラータイプを説明します(通知、警告、致命的なエラー、解析エラー)。 Apr 08, 2025 am 12:03 AM

PHPには4つの主要なエラータイプがあります。1。notice:わずかなものは、未定義の変数へのアクセスなど、プログラムを中断しません。 2。警告:通知よりも深刻で、ファイルを含むなど、プログラムを終了しません。 3。ファタラー:最も深刻なのは、機能を呼び出すなど、プログラムを終了します。 4。ParseError:構文エラーは、エンドタグの追加を忘れるなど、プログラムの実行を防ぎます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? HTTPリクエストメソッド(取得、投稿、配置、削除など)とは何ですか?それぞれを使用する必要がありますか? Apr 09, 2025 am 12:09 AM

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPは、ファイルを安全に処理する方法をどのように処理しますか? PHPは、ファイルを安全に処理する方法をどのように処理しますか? Apr 10, 2025 am 09:37 AM

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

PHP OOPで、self ::、parent ::、and static ::の違いを説明します。 PHP OOPで、self ::、parent ::、and static ::の違いを説明します。 Apr 09, 2025 am 12:04 AM

Phpoopでは、self ::は現在のクラスを指し、親::は親クラスを指し、静的::は後期静的結合に使用されます。 1.Self ::静的方法と一定の呼び出しに使用されますが、後期静的結合をサポートしていません。 2.Parent ::サブクラスには、親クラスのメソッドを呼び出すために使用され、プライベートメソッドにアクセスできません。 3.Static ::継承と多型に適した後期静的結合をサポートしますが、コードの読みやすさに影響を与える可能性があります。

See all articles