技術記事やフリーランス記事をメインに情報公開をしています。是非見ていってください。

  1. バックエンド

LaravelのEloquentモデルを理解して使ってみよう!

最終更新日:2019/03/17

本記事では、LaravelのEloquentモデルとは何かをわかりやすく解説していきます。

以下の記事の続きです。まだ読んでいない方はぜひご一読ください!

初心者の方でもLaravelの動作環境を簡単に作れるWINDIIオリジナルのソースコードを用意したので、実際に動かして学ぶとより深く理解できるようになります!

以下の記事を参考にご活用ください。

LaravelのEloquentモデルってなに?

Eloquentは、SQLをできるだけ書くことなく、簡潔にデータベースにアクセスできるような仕組みです。
前回のマイグレーションの章ではテーブルの作成を行いましたが、そこにデータを保存したり、取り出したり、削除したりできます。

SQLを書けばいいじゃん!って思う方もいると思いますが、よくある処理であればEloquentで書くほうがずっと綺麗に書けるので、コードが読みやすくなります。
ぜひ使い方をマスターしましょう!

Eloquentを使ってみる

実際に使ってみるとよりわかりやすいのでさっそく始めていきましょう!

今回は例として、タイトルと本文をもつ記事を保存するテーブルを作り操作していくことにします。

docker-compose exec app bash

以下のコマンドを実行してみましょう。

php artisan make:model Article -m

後ろの-m は「マイグレーションファイルも一緒に作成して!」という意味です。

実行できたら2つのファイルが作成されます。

app/Article.php

database/migrations/XXXX_create_articles_table.php

まずはマイグレーションファイルを書き上げます。

database/migrations/XXXX_create_articles_table.php を以下のようにしましょう。

database/migrations/XXXX_create_articles_table.php

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title'); // 追加
            $table->string('content'); // 追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

マイグレーションに関してわからない場合は以下の記事で解説しているので未読の人はぜひチェックしてみてください!

書き上げたら、以下のコマンドでマイグレーションを実行します。

php artisan migrate

データベースを確認してarticles テーブルが作成されているのを確認しましょう。

もちろん中身はなにもありません。

次の章ではEloquentモデルを使ってデータを読み書きしてみましょう!

tinker上でEloquentを使ってデータを読み書きする

お待たせしました。それでは、さっそくEloquentを使ってみましょう。

tinkerを使ってEloquentを操作します。

「え?tinkerってなに?」って方向けに説明しておきますと、tinkerはphpを対話式で実行するための仕組みです。

使ってみたほうが早いのでさっそく使ってみましょう!

以下のコマンドでtinkerを立ち上げます。

php artisan tinker

以下のような感じでtinkerが立ち上がります。

とりあえずhello world!をしておきましょう!

echo "hello world!";

このような感じでPHPを実行することができます。ちょっと動作確認してみたいときに重宝するので覚えていきましょう。

それでは、Eloquentの話に戻ります。

データの作成

さっそく以下のような感じで記事を保存する処理を書いてみましょう。

use App\Article;
$article = new Article;
$article->title = "title1";
$article->content = "content1";
$article->save();

データベースを見てみると、以下のようになっているはずです。

投稿がちゃんと保存されていますね!

データの読みこみ

今度はこのデータを取り出してみましょう。

use App\Article;
$post = Article::find(1);

idが1番の投稿を取り出しています。以下のように表示されるはずです。

また条件も指定してデータを取り出すことができます。

$post = Article::where('title', 'title1')->first();

ここではtitleカラムの値がtitle1 に一致している投稿を取得しています。

データの更新

次にデータを更新してみましょう。

$post = Article::find(1);
$post->title = "title2";
$post->save();

tinker上では以下のように表示されると思います。

>>> $post = Article::find(1);
=> App\Article {#2923
     id: 1,
     title: "title1",
     content: "content1",
     created_at: "2019-03-17 05:02:14",
     updated_at: "2019-03-17 05:02:14",
   }
>>> $post->title = "title2";
=> "title2"
>>> $post->save();
=> true
>>> $post = Article::find(1);
=> App\Article {#2914
     id: 1,
     title: "title2",
     content: "content1",
     created_at: "2019-03-17 05:02:14",
     updated_at: "2019-03-17 05:18:14",
   }
>>> 

ちゃんと更新されましたね。

データの削除

最後にデータの削除です。

$post = Article::find(1);
$post->delete();

tinkerでの動作結果

>>> $post = Article::find(1);
=> App\Article {#2931
     id: 1,
     title: "title2",
     content: "content1",
     created_at: "2019-03-17 05:02:14",
     updated_at: "2019-03-17 05:18:14",
   }
>>> $post->delete();
=> true

データがなくなってますね。

いかがでしょうか。Eloquentでかくとスッキリとデータの読み書きができているのがわかりますね。

Eloquentの機能は他にもたくさんあるのですが、とりあえず今回は導入ということでここまでにします。

The following two tabs change content below.

riri

25歳。 Twitter:りリー@ryudoi1 フリーランスとして働きながら、WINDII(ウィンディ)ではテックメディア事業や、受託事業を行なっています! フリーランスになるまでの過程は こちら

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。