Laravel8 リレーションhasOne()とofMany()で最小/最大の1レコードの取得方法

hasMany()で取得できる複数レコードのうちあるカラムの最小、または最大の1レコードを取得する方法。

// call元
$category->min_age->age;

call元は、hasMany()と同じ感じでコールすればよい。

// Categoryモデル
public function min_age()
{
    $categoryAge = $this->hasOne(CategoryAge::Class)->ofMany('age', 'min');
    return $categoryAge;
}

hasMany()をhasOne()にし、ofMany(対象カラム, ‘min’ or ‘max’)にすればOK。

注意点

オートインクリメントのidカラムが存在しないとエラーとなり使えない。

フレームワークの恩恵を受けるには、何も考えずとりあえず「全てのテーブルにオートインクリメントのidカラムを用意する」というテーブル設計が好きになれないが仕方がない。

ちなみにlatestOfMany()で最新、oldestOfMany()で最古の1レコードを返してくれる。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です