やりたいこと
子テーブルを持つ親テーブルにアクセスさせないようにしたい。
理由
親テーブルを削除するときに、外部キー制約によるエラーをDBに近いところでやりたくない。
仕組み
- リクエストされた
user_id
がusersテーブルに存在することを確認します。exists:users,id
- postsのuser_idカラムには、リクエストした
user_id
が存在しないことを確認します。unique:posts,user_id
- 結果:usersには存在しているけど、postsには存在しない
user_id
の場合のみvalidationを通す。
/**
* @return array
*/
public function rules()
{
return [
'user_id' => 'required|exists:users,id|unique:posts,user_id',
];
}
調べてもなかなか出てこなかったので、記事にまとめました。
この仕組を理解すると、他にもいろいろ組み合わせることでできることがあるんじゃないかといった視点を持つことにつながるので勉強になりました。