こんにちは、PHP開発者の皆さん!この連載の第3回では、Laravel 10のモデルとデータベースの操作について詳しく解説します。Eloquent ORMを使用して、データベースとのやり取りを簡単かつ効率的に行う方法を学びましょう。それでは、始めましょう!
1. Eloquent ORMの基本
LaravelのEloquent ORMは、モデルを通じてデータベースとのやり取りを行うための強力なツールです。各データベーステーブルに対応するモデルを定義し、モデルを通じてデータの取得や操作を行います。
モデルの生成
まずは、モデルを生成してみましょう。ターミナルで以下のコマンドを実行します。
./vendor/bin/sail artisan make:model Post
Bashこのコマンドにより、app/Models/Post.php
ファイルが生成されます。
2. マイグレーションの作成
マイグレーションは、データベーススキーマを管理するための仕組みです。テーブルの作成や変更をコードで記述し、バージョン管理することができます。
マイグレーションの生成
モデルと同時にマイグレーションを生成するには、以下のコマンドを実行します。
./vendor/bin/sail artisan make:model Post -m
Bashこのコマンドにより、database/migrations/xxxx_xx_xx_create_posts_table.php
ファイルが生成されます。
マイグレーションの編集
生成されたマイグレーションファイルを編集して、posts
テーブルのスキーマを定義します。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
PHPマイグレーションの実行
以下のコマンドを実行してマイグレーションを実行し、データベースにposts
テーブルを作成します。
./vendor/bin/sail artisan migrate
Bash3. モデルの定義
Eloquentモデルは、テーブルと対応するクラスです。モデルクラスを定義し、属性やリレーションシップを設定します。
モデルクラスの編集
app/Models/Post.php
を開き、以下のように編集します。
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array<int, string>
*/
protected $fillable = [
'title',
'body',
];
}
PHP$fillable
プロパティは、マスアサインメント可能な属性を指定します。これにより、複数の属性を一度に設定できます。
4. データベース操作
Eloquentを使ってデータベース操作を行う方法を見てみましょう。
レコードの作成
新しいレコードを作成するには、以下のようにします。
use App\Models\Post;
$post = new Post;
$post->title = 'My First Post';
$post->body = 'This is the body of my first post.';
$post->save();
PHPまたは、create
メソッドを使って一度に作成することもできます。
Post::create([
'title' => 'My Second Post',
'body' => 'This is the body of my second post.',
]);
PHPレコードの取得
すべてのレコードを取得するには、all
メソッドを使います。
$posts = Post::all();
PHP特定のレコードを取得するには、find
メソッドを使います。
$post = Post::find(1);
PHPレコードの更新
既存のレコードを更新するには、以下のようにします。
$post = Post::find(1);
$post->title = 'Updated Title';
$post->save();
PHPまたは、update
メソッドを使って一度に更新することもできます。
Post::where('id', 1)->update(['title' => 'Updated Title']);
PHPレコードの削除
レコードを削除するには、以下のようにします。
$post = Post::find(1);
$post->delete();
PHPまたは、destroy
メソッドを使って一度に削除することもできます。
Post::destroy(1);
PHP5. リレーションシップの定義
Eloquentでは、テーブル間のリレーションシップを簡単に定義できます。ここでは、1対多のリレーションシップを例に見てみましょう。
ユーザーモデルの作成
まず、ユーザーとポストの関係を定義するためにユーザーモデルを作成します。
./vendor/bin/sail artisan make:model User -m
Bash次に、users
テーブルのマイグレーションを編集します。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
PHP同様に、posts
テーブルに user_id
カラムを追加します。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddUserIdToPostsTable extends Migration
{
public function up()
{
Schema::table('posts', function (Blueprint $table) {
$table->foreignId('user_id')->constrained()->onDelete('cascade');
});
}
public function down()
{
Schema::table('posts', function (Blueprint $table) {
$table->dropColumn('user_id');
});
}
}
PHPリレーションシップの定義
ユーザーモデルとポストモデルにリレーションシップを定義します。
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
use HasFactory;
public function posts()
{
return $this->hasMany(Post::class);
}
}
PHPnamespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
public function user()
{
return $this->belongsTo(User::class);
}
}
PHPこれで、ユーザーとポストのリレーションシップが定義されました。
6. まとめ
この記事では、Laravel 10のモデルとデータベース操作について解説しました。Eloquent ORMを使うことで、データベースとのやり取りが非常に簡単になります。次回は、RESTful APIの設計と実装について学びます。それでは、次の記事でお会いしましょう!
次の記事: 第4回 RESTful APIの設計と実装
コメント