0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Chapter5 データベースを用意する(5-1)

Posted at

モデルとデータベース

モデルとは

でーたの管理を行うところ。
=「データベースの処理」を担当する部分です。

データを保管庫として使うことを想定しているアプリケーションであれば、
コントローラに数行記述すれば事足りるので、
モデルを作成して設定してだと返って大変になる。

逆に多数のテーブルを連携させて複雑なでーた処理を行っているような
アプリケーションであればコントローラで扱う処理の大半がデータベース関係では、
モデルに切り離してわかりやすく求めるべきです。

Larabelの機能

DBクラス(クエリビルダ)

最もシンプルなアプローチは「DB」クラスを利用する方法です。

この「DB」クラスでは、
データベースにアクセスするためのクエリを生成し、
送信することができます。
SQLクエリを直接実行するイメージに近い。

Eloquent (ORM)

ORM(Object-Relational-Mapping)と呼ばれる機能をLarabelに実装したものです。
ORMは、
「データベースのデータとプログラミング言語のオブジェクト言語のオブジェクトの間を取り持つ」役割があり、
「データベースのデータをシームレスに言語のオブジェクトに変換し、操作できるようにします。」

SQLiteデータベースを準備する

Macは「SQLite」も「DB Browser for SQLite」も
標準装備しているため、インストール不要。

DB Browser for SQLite

DB Browser for SQLiteを起動して、
「ツールでデータベースを手作業で作る」ことからやります。

データベースファイルを作る

テーブルを作成する

「people」テーブル

テーブル項目名 役割
id      保管するデータ(レコード)に割り当てる番号
name        名前を保管する項目
mail メールアドレスを保管する項目
age 年齢を保管するための項目

peopleテーブルを作る

下記のように「people」テーブルを新規作成し、
各項目をそれぞれのステータスで設定する。

スクリーンショット 2022-07-02 22.33.09.png

ステータス 意味 役割
MN      Not Null   空であることを禁止 
PK        Primary Key  データを識別するために用意される項目 
AI Auto increment  自動的に値を1つずつ増やしながら設定していく機能
U Unique   同じ値が存在してはいけない

ダミーレコードを追加する

  1. 「データ閲覧」のタブから「新しいレコードを現在のテーブルに挿入」でレコードを追加し、
    任意のレコードに変更。
  2. 入力が完了したら、「変更を書き込み」をクリックして変更を保存。

スクリーンショット 2022-07-02 23.02.29.png

DB利用のための手続き

Larabelからデータベースを利用します。
Larabelで使用するベータベースの情報は、
「config」フォルダにある「database.php」というファイルが用意されています。

database.php
<?php

use Illuminate\Support\Str;

return [

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
        ],

        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

        'sqlsrv' => [
            'driver' => 'sqlsrv',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '1433'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'prefix_indexes' => true,
        ],

    ],

    **以下略**

];

データベースの設定

デフォルトのデータベースを「SQLite」に変更する。

database.php
'default' => env('DB_CONNECTION', 'sqlite'),
database.php
'sqlite' => [
            'driver' => 'sqlite',
            'url' => env('DATABASE_URL'),
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],

.envの環境変数について

データベースの設定は完了ですが、もう1つ設定しておく必要があります。
Laravelの「環境変数」です。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelapp
DB_USERNAME=root
DB_PASSWORD=
.env
DB_CONNECTION=sqlite

DB_CONNECTIONsqliteに書き換え、
SQLiteでは他の環境変数は使わないため、削除します。
(そのままだと「database.php」で設定した値が有効になりません。)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?