ホームページ > PHPフレームワーク > Laravel > Laravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか?

Laravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2023-06-14 08:21:39
オリジナル
1552 人が閲覧しました

Laravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか?

Laravel は、強力で使いやすいデータベース操作ツールである Laravel Eloquent を提供する人気の PHP フレームワークです。従来、PHPを使用してデータベース操作を行うには、必然的に長いSQL文や面倒なコードを大量に記述する必要がありましたが、Laravel Eloquentを使用することでデータベースモデルを簡単に構築でき、迅速な開発とメンテナンスを実現できます。この記事では、Laravel Eloquentを使用してデータベースモデルを構築する方法を紹介します。

1. データベース テーブルの作成

まず、データベースの移行 (Migration) によってデータベース テーブルを作成する必要があります。 Laravel では、このプロセスはコマンドライン ツール アーティザンを使用して実現できます。コマンド ラインに次のように入力します:

php artisan make:migration create_users_table
ログイン後にコピー

このコマンドは、app/database/migrations ディレクトリに移行ファイルを作成します。ファイル名は、2019_08_17_000000_create_users_table.php のように、現在の日付と時刻に移行の名前を加えたものになります。 。移行ファイルを変更し、対応するデータベース構造を書き込みます。

Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});
ログイン後にコピー

上記のコードは、users という名前のテーブルを作成します。このテーブルには、id、name、email、email_verified_at、password、remember_token、created_at、updated_at の 8 つのフィールドが含まれます。次に、移行ファイルを実行してデータベース テーブルを作成します。

php artisan migrate
ログイン後にコピー

2. モデルの作成

アプリケーション内でモデル (モデル) を作成することは、Laravel Eloquent を使用する最初のステップです。モデルは、artisan ツールを使用して作成できます。

php artisan make:model User
ログイン後にコピー

上記のコマンドは、データベースの users テーブルに対応する、user という名前のモデルをアプリ ディレクトリに作成します。デフォルトでは、Laravel Eloquent はデータベーステーブル名がモデル名の複数形であると想定します。別のテーブル名に対応させる必要がある場合、または別のデータベース接続を使用する必要がある場合は、モデル内で属性 $table および $connection を定義できます。 。

モデルの定義は次のとおりです:

namespace App;

use IlluminateDatabaseEloquentModel;

class User extends Model
{
    //
}
ログイン後にコピー

3. モデルのプロパティ

モデルでは、Laravel Eloquent は次のようないくつかのデフォルトのプロパティとメソッドを定義しています:

  1. $fillable 属性: インジェクション攻撃を防ぐためにバッチで割り当てることができる属性を定義します。 create() メソッドと update() メソッドを使用して、作成/更新リクエストから値を設定できます。
protected $fillable = [
    'name', 'email', 'password',
];
ログイン後にコピー
  1. $hidden 属性: 配列内で非表示にする属性を定義します。シリアル化すると、これらのプロパティは非表示になります。
protected $hidden = [
    'password', 'remember_token',
];
ログイン後にコピー
  1. $casts 属性: 属性をネイティブ型 (整数、ブール、浮動小数点など) またはカスタム オブジェクトに変換するかどうかを定義します。
protected $casts = [
    'email_verified_at' => 'datetime',
];
ログイン後にコピー

4. モデルメソッド

Laravel Eloquent は、モデル内でデータ操作を実行するためのメソッドをいくつか提供します。最も一般的なモデル メソッドの一部を次に示します。

  1. where(): WHERE 条件を追加するために使用されます。
$user = User::where('name', 'John')->first();
ログイン後にコピー
ログイン後にコピー
  1. find(): モデルの主キー ID によってレコードを検索するために使用されます。
$user_id = 1;
$user = User::find($user_id);
ログイン後にコピー
  1. first(): 最初に見つかったレコードを返します。
$user = User::where('name', 'John')->first();
ログイン後にコピー
ログイン後にコピー
  1. get(): 見つかったすべてのレコードを返します。
$users = User::all();
ログイン後にコピー
  1. create(): 新しいデータ レコードの作成に使用されます。
User::create(['name' => 'Taylor', 'email' => 'taylor@example.com', 'password' => 'password']);
ログイン後にコピー
  1. update(): レコードの更新に使用されます。
$user = User::find($user_id);
$user->name = 'Updated Name';
$user->save();
ログイン後にコピー
  1. delete(): レコードの削除に使用されます。
$user = User::find($user_id);
$user->delete();
ログイン後にコピー

上記は、データベースに対する追加、削除、変更、クエリ操作を迅速に実装できる、基本的な Laravel Eloquent モデルのメソッドの一部です。

5. アソシエーション関係

Laravel Eloquent は、1 対 1 (One to One)、1 対多 (One to Many) などのさまざまな関係を定義する便利な方法も提供します。多対多およびポリモーフィックな関係。以下に例をいくつか示します。

  1. One to One

1 対 1 の関連付けでは、各モデル インスタンスは他の 1 つのモデルにのみ関連付けられます。インスタンスは関連付けられます。たとえば、users テーブルの各行は、ユーザーの電話番号を格納するphone テーブルの行に関連付けることができます。 User モデルで、モデルと電話モデルの間の 1 対 1 の関係を表すphone() メソッドを定義します。

class User extends Model
{
    public function phone()
    {
        return $this->hasOne('AppPhone');
    }
}
ログイン後にコピー

Phone モデルで、反対の hasOne() メソッドを定義します。

class Phone extends Model
{
    public function user()
    {
        return $this->belongsTo('AppUser');
    }
}
ログイン後にコピー
  1. 1 対多

1 対多の関係では、1 つのモデル インスタンスは別のモデル インスタンスに関連付けられ、もう 1 つのモデル インスタンスは別のモデル インスタンスに関連付けられます。複数のモデル インスタンス。たとえば、フォーラム サイトでは、各テンプレートが多数のコメントに関連付けられている場合があります。 Thread モデルで、モデルと Comment モデルの間の 1 対多の関係を表す comments() メソッドを定義します。

class Thread extends Model
{
    public function comments()
    {
        return $this->hasMany('AppComment');
    }
}
ログイン後にコピー

Comment モデルで、反対側のbelongsTo() メソッドを定義します。

class Comment extends Model
{
    public function thread()
    {
        return $this->belongsTo('AppThread');
    }
}
ログイン後にコピー
  1. 多対多

多対多の関係では、モデル インスタンスは他の多くのモデル インスタンスに関連付けられ、各関連モデル インスタンスも複数のモデル インスタンスに関連付けられています。たとえば、ブログでは、各記事に複数のカテゴリ タグが含まれる場合があり、各タグにも複数の記事が含まれる場合があります。 Post モデルで、モデルと Tag モデルの間の多対多の関係を表す tags() メソッドを定義します。

class Post extends Model
{
    public function tags()
    {
        return $this->belongsToMany('AppTag');
    }
}
ログイン後にコピー

タグ モデルで、反対のbelongsToMany() メソッドを定義します。

class Tag extends Model
{
    public function posts()
    {
        return $this->belongsToMany('AppPost');
    }
}
ログイン後にコピー
  1. 多态关联(Polymorphic Relations)

多态关联允许模型通过多个中介模型与其他模型进行多对多关联。例如,在应用中可以使用comments模型对其他类型的模型进行评论。在Comment模型中,定义一个commentable()方法,表示该模型与所有支持评论的模型之间的多态关系。

class Comment extends Model
{
    public function commentable()
    {
        return $this->morphTo();
    }
}
ログイン後にコピー

在支持评论的模型中,例如Post和Video模型中,定义morphMany()方法。

class Post extends Model
{
    public function comments()
    {
        return $this->morphMany('AppComment', 'commentable');
    }
}

class Video extends Model
{
    public function comments()
    {
        return $this->morphMany('AppComment', 'commentable');
    }
}
ログイン後にコピー

以上是Laravel Eloquent提供的关联关系,可以让开发者在数据库模型中轻松处理复杂的关系结构。

七、总结

本文介绍了使用Laravel Eloquent构建数据库模型的基础知识,包括创建数据库表、创建模型、模型属性和方法,以及关联关系。Laravel Eloquent提供了一种简单和直观的方式来操作数据库,使得开发者能够快速构建应用程序,并为复杂的数据库结构提供了更干净、易于维护的解决方案。希望这篇文章对你的学习和开发有所帮助。

以上がLaravel 開発: Laravel Eloquent を使用してデータベース モデルを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート