Laravel Eloquent リレーション継承?ポリモフィックリレーション?
Laravel Eloquentでの、リレーション継承について
リレーションの定義の方法や抽象化について少し迷っており、ご意見いただきたいです。
まず、ベースとなるPrefecture
モデルがあるとします。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Prefecture extends Model
{
// 都道府県に属する市区町村を返す
public function city()
{
return hasMany('App\City');
}
// 都道府県に属する清掃業者を返す
public function cleaners()
{
return hasMany('App\Cleaner');
}
// 都道府県に属する引っ越し業者を返す
public function movers()
{
return hasMany('App\Mover');
}
}
上記モデルの状態では、ページとしては「北海道の清掃業者一覧」「東京都の引越し業者一覧」などが表示されることを意図としています。
ただ、ここで業者一覧のページでそれぞれ別のコンテンツを表示させたいということになりました。(47都道府県 × 2業者分 = 97種類のコンテンツ)
なので、下記のような実装を行いました。
大元となるPrefecture
モデルは本来持つべき市区町村とのリレーションのみ保持し、
各業者でPrefecture
モデルを拡張したモデルを作成するようにしました。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Prefecture extends Model
{
// 都道府県に属する市区町村を返す
public function city()
{
return hasMany('App\City');
}
}
namespace App\Cleaner;
use Illuminate\Database\Eloquent\Model;
use App\Prefecture as BasePrefecture;
class CleanerPrefecture extends BasePrefecture
{
// 都道府県に属する清掃業者を返す
public function cleaners()
{
return hasMany('App\Cleaner');
}
// 都道府県ごとのコンテンツを表示する
public function contents()
{
return hasMany('App\Cleaner\Content');
}
}
ただ、ポリモフィックリレーションなどを用いることでもう少し良いリレーションの書き方ができるのではないかと感じました。
皆様のご意見いただきたいです。
よろしくお願いします。