🍤
Laravel Eloquent ORMのちょっとした小ネタ
LaravelのEloquent ORMであまり使わないかもしれないちょっとした小ネタです。
忘れたときにマニュアルから探すのが面倒なのでここにまとめておこうと思います。
環境
- PHP 8.1.2
- Laravel 9.5.1
主キーを使わない場合
下記の2つを行うことで対応できます。
- Eloquentを使う場合、主キーは
id
になるのでこの設定を無効 - 上記に合わせてオートインクリメントの設定も無効
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Sample extends Model
{
/**
* The primary key for the model.
*
* @var string
*/
protected $primaryKey = null; // 無効
/**
* Indicates if the IDs are auto-incrementing.
*
* @var bool
*/
public $incrementing = false; // 無効
}
created_atとupdated_atを使わない場合
マニュアルに書いてある通り、$timestamps
プロパティにfalse
を設定すると更新は発生しないです。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Sample extends Model
{
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false; // 無効
}
もしくは、動的に値を設定することで対応も可能です。
<?php
use App\Models\Sample;
$model = new Sample();
$model->timestamps = false;
$model->save();
created_atとupdated_atが別名の場合
モデルクラスにCREATED_AT
、または、UPDATED_AT
定数に別名を設定するだけです。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Sample extends Model
{
/**
* The name of the "created at" column.
*
* @var string|null
*/
const CREATED_AT = 'create_date_time';
/**
* The name of the "updated at" column.
*
* @var string|null
*/
const UPDATED_AT = 'update_date_time';
}
変更しない場合、created_at
とupdated_at
が値として設定されています。
created_atとupdated_atのどちらかを使わない場合
更新が発生しないようなテーブルの場合、updated_at
は不要ですね。
その場合、UPDATED_AT
定数にnull
を設定すると更新されなくなります。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Sample extends Model
{
/**
* The name of the "updated at" column.
*
* @var string|null
*/
const UPDATED_AT = null;
}
Laravelのコードを見てもらうと良いかと思いますが、カラム名がnull
の場合は何もしないようです。
Discussion