基本的にLaravelにはルールがあります。
特にモデルはルールに則って記述していくと、ある程度勝手に動いてくれる代物。
例えば、その一つに『「テーブル名」が複数形に対して、「モデルのファイル名」は単数形で書くこと』という命名ルールがあります。
詳しくは以下の記事に解説しているので、ご参考ください!
しかし、もしすでに設計されているテーブル名が複数形じゃなかったり、まったく異なるテーブル名だったり……モデル名とテーブル名を一致できないケースがありえます。
開発中で複数のテーブルがあったりある程度開発が進んでいる時に「名前を変えてくれ!」と言うわけにもいかない時や、訳あってテーブル名を付けられている時に困ってしまいます。
また、IDを自動採番したくないケースや、登録更新日時が不要なケース、主キーがIDじゃないケースもあります。
そんな時にもちゃんと対応できるのがLaravelです。
プロパティを設定する1文を追加するだけで、簡単に対応可能です!
今回はその方法を備忘録的に解説します。
事前準備
ここではモデル名が「Book」として解説します。
以下のコマンドでモデルファイルを作ると、以下のようなファイルが生成されます。
php artisan make:model Book
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
}
テーブル名とモデル名が一致しない時の対処法
関連付けるテーブル名を変更する場合は、以下の1文を追加してあげるだけです。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
/**
* モデルと関連付けるテーブル名
**/
protected $table = 'book_list';
}
上記の$tableプロパティを追加しました。
IDで自動採番したくない時の対処法
こちらも同じように以下の1文を追加してあげるだけで対応可能です。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
/**
* 主キーで自動採番させない
**/
protected $incrementing = false;
}
$incrementingにfalseを記述してあげることで、自動採番ではなくなります。
登録・更新日時を無効にする
created_atとupdated_atの自動更新を無効にしたい時には以下を追加します!
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
/**
* created_atとupdated_atの自動更新を無効
**/
protected $timestamps = false;
}
$timestampsにfalseを記述してあげることで、自動更新はなくなります。
主キーをidから別のカラムに変更する
主キーをidではない別のカラムにしたい時には以下を追加します!
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
/**
* 主キーをidから別のカラムに変更する
**/
protected $primaryKey = 'book_id';
}
$primaryKeyに主キーにしたいカラム名を記述してあげることで、主キーを変更できます!
さいごに
個人的に、よく使うモデルのプロパティ設定を集めてみました。
はじめてLaravelを使った時に、テーブル名やカラム名、主キーなど自動で設定されることとの誤差がひどすぎてすごく困ったので、備忘録的まとめです。
誰かの参考になれば幸いです。