【Laravel】Eloquent 規約とプロパティ
クラスとデータベーステーブルとの関連付け
・Eloquentにおまかせ(暗黙的に関連付けられる)
テーブル名:複数形 例)authors
クラス名:(テーブル名の)単数形 例)Author
・テーブル名にアンダースコアが含まれるとき(暗黙的に関連付けられる)
テーブル名:スネークケース 例)book_sample
クラス名:キャメルケース 例)BookSample
・自力で関連付けるとき
$tableプロパティで指定
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class BookSample extends Model
{
// book_sampleテーブルを関連付ける
protected $table = 'b_sample';
// -----省略-----
タイムスタンプを記録しない設定
$timestampsプロパティをfalseに設定
created_atカラムに登録日時、updated_atカラムに更新日時が記録されなくなる
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
// デフォルトはtrue
protected $timestamps = false;
// -----省略-----
Mass Assignmentによる脆弱性への対策
・Mass Assignment機能とは
createメソッドやupdateメソッドの引数に、連想配列でカラム名と値を渡すことでデータ登録が可能になる。
・脆弱性
便利な反面、ユーザーの権限操作など、アプリケーションによる変更を想定していないカラムの値が渡された場合、システムの脆弱性につながる可能性がある!
・対策
Eloquentは、デフォルトではすべてのフィールドでMass Assignmentが無効になっている。
・Mass Assignmentの利用方法
※以下の2つの方法は、同時には利用できない!
編集可能なカラムを設定(ホワイトリスト方式)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
// nameカラムとkanaカラムを指定可能にする
protected $fillable = [
'name',
'kana'
];
// -----省略-----
編集を認めないカラムを設定(ブラックリスト方式)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Author extends Model
{
// id,created_at,updated_atは任意での指定を不可とする
protected $guarded = [
'id',
'created_at',
'updated_at'
];
// -----省略-----
参照: