Compoships 関連モデルを複数の外部キーで紐付ける[Laravel]
どうもfujiharaです。今回はLaravelで関連モデルを設定する時に複数の外部キーで紐付ける方法をご紹介します。 同じ悩みを抱えてる方がこの記事のタイトルで発見してくれるか不安です。
背景
外部サービスからデータをインポートする時に以下のような状態でした。(例)
Cityのcodeがユニークかと思ったら、prefecture_codeとの複合ユニークでHospitalと紐付けるには
外部キーを複数で設定する必要がありました。
インポートする時にidで紐付けるようにすればとも思ったんですが、インポート時に検索クエリを出したくないのもあり
そのままインポートしました。
Compoships
今回の場合、HospitalはCityにBelongsToなのですが、LaravelのBelongsToを 設定する際に設定できる外部キーは1つだけなのでComposhipsを導入しました。
設定する時は双方のModelでComposhipを使用します。
App\Models\Hospital.php内 (設定箇所のみ
use Compoships;
public function city(): BelongsTo
{
return $this->belongsTo(
City::class,
['city_code', 'prefecture_code'], //Hospital側のキー
['code', 'prefecture_code'], //City側のキー
);
}
App\Models\City.php内(設定箇所のみ
use Compoships;
まとめ
その他にhasOne, HasManyにも使えます。それでは素敵なRelation生活を。