Laravelのモデルを試してみる

Laravelのルーティングとコントローラーを試してみる https://yk5656.hatenablog.com/entry/20210102/1609513200

の続き

データを登録

データベースを作成して、テーブルを作成し、データを入れる。

$ mysql -u root

> CREATE DATABASE laravel;
> USE laravel;

> CREATE TABLE books (
  id int NOT NULL AUTO_INCREMENT,
  name varchar(100),
  price int,
  PRIMARY KEY (id)
);

> INSERT INTO books (name, price) VALUES ('aaa', 1000);
> INSERT INTO books (name, price) VALUES ('bbb', 2000);
> INSERT INTO books (name, price) VALUES ('ccc', 3000);

モデルの作成

モデルを作成。

$ php artisan make:model Book
$ cat app/Book.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    //
}

表示

「use App\Book;」を追加し、booksテーブルのデータを全て取得するようコントローラを修正。

$ vi app/Http/Controllers/HelloController.php
・・・
use App\Book;

class HelloController extends Controller
{
  public function index()
  {
    $books = Book::all();

    return view('hello3', ['books' => $books]);
  }
}

ビューを修正。

$ vi resources/views/hello3.blade.php
@foreach($books as $book)
<h3>{{ $book->name }} - {{ $book->price }}</h3>
@endforeach

http://192.168.33.10:8000/hello3
にアクセスすると、booksテーブルのデータが表示される。 f:id:yk5656:20210205121750j:plain

補足

ちなみに、モデルを作成する際に「 --migration」を付けると、

$ php artisan make:model Article  --migration

モデルが作られるだけでなく、

$ cat app/Article.php
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    //
}

マイグレーションファイルも作成される。

$ cat database/migrations/2021_02_05_042822_create_articles_table.php
<?php

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

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

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