LaravelのEloquentについてメモ(DB接続編)
Laravelの経験が少ないので、公式を見ながら少しずつメモ。
Eloquent ORMとは?
LaravelのDB操作のこと。CRUD。
DBの接続情報の設定
下記ファイルに設定
config/database.php
モデルファイル
モデルファイルはappディレクトリ配下に設置。
composer.jsonファイルにオートロードするように指定した場合は、どこでも設置可能。
全てのEloquentモデルは、Illuminate\Database\Eloquent\Model
を拡張する必要あり。
Artisanコマンドでモデル生成
下記コマンドで生成
php artisan make:model User
app/user.phpが生成される。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//
}
テーブル名
生成したモデルにどのテーブルを使用するか。
テーブル名を指定しない場合は、<font color="Red">クラス名を複数形のスネークケースにしたものが、自動的にテーブル名とされる。</font>
Userモデル → userテーブル
テーブル名を指定するときは、tableプロパティを定義する。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//テーブル名指定
protected $table = 'test_user';
}
タイムスタンプ
EloquentはDBのcreated_atとupdated_atを自動更新してくれる。
自動更新してほしくないときは、timestampsプロパティをfalseにする。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//タイムスタンプを自動更新しないように設定
public $timestamps = false;
}
タイムスタンプを保存するカラム名もカスタム可能。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
別のDBに切り替え
EloquentモデルはDBを指定しない場合は、デフォルトに設定されているデータベースに接続する。
データベースを指定したい場合は、connectionプロパティを使用する。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
//コネクション名を指定
protected $connection = 'mysql2';
}
データベースの接続情報は、
config/database.phpに記載する。
defaultキーでデフォルトDBの接続情報を指定している。
'default' => 'mysql',
'connections' => [
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST_ONE', 'localhost'),
'database' => env('DB_DATABASE_ONE', 'forge'),
'username' => env('DB_USERNAME_ONE', 'forge'),
'password' => env('DB_PASSWORD_ONE', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'mysql2' => [
'driver' => 'mysql',
'host' => env('DB_HOST_TWO', 'localhost'),
'database' => env('DB_DATABASE_TWO', 'forge'),
'username' => env('DB_USERNAME_TWO', 'forge'),
'password' => env('DB_PASSWORD_TWO', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
],
公式
https://readouble.com/laravel/5.8/ja/eloquent.html#introduction
実際にまとめてみると、理解が深まる。