12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelのExistsバリデーションで存在チェックする列名がパラメータのnameと異なる場合の解決策

Last updated at Posted at 2017-11-07

LaravelのバリデーションのExistsの存在チェックで、
Ruleを利用した少し複雑なチェックをするときにテーブルの列名がパラメータのnameと異なる場合、
マニュアルに記載がなかったので共有。

環境

名前 バージョン
PHP 7.1.6
Laravel 5.5.14

解決方法

存在チェックするテーブル「posts」の「id」列にパラメータのpost_idが存在するかチェックする場合、
Rule::exists()の第二引数にテーブルの列名を指定すればOKです。
以下のような感じです。

$request->validate([
    'type' => 'required|integer',
    'post_id' => [
        'required',
        'integer',
        Rule::exists('posts', 'id')->where(function ($query) use ($request) {  // ★この行
            $query->where('type', $request->input('type'));
        }),
    ],
]);

バリデーションのソースを読むと、

Illuminate\Validation\Rule.php
    /**
     * Get a exists constraint builder instance.
     *
     * @param  string  $table
     * @param  string  $column
     * @return \Illuminate\Validation\Rules\Exists
     */
    public static function exists($table, $column = 'NULL')
    {
        return new Rules\Exists($table, $column);
    }

とあり、列名を指定しろとありました。。

12
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?