ハッピーメモメモ

私的備忘録

【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'
    ];
    // -----省略-----

 

 

参照:

www.socym.co.jp