пользовательское правило проверки laravel при обновлении записи - PullRequest
0 голосов
/ 30 января 2019

У меня есть 2 таблицы для серии и уроки в модели модели.У меня есть отношение, чтобы связать урок с серией, я создал собственное правило проверки, чтобы тот же episode_number в таблице уроков не повторялся в той же серии, и он работает нормально, но при обновлении я хочу исключить этот урок из проверки.

Это моя таблица уроков:

public function up()
{
    Schema::create('lessons', function (Blueprint $table) {
        $table->increments('id');
        $table->unsignedInteger('series_id');
        $table->string('title');
        $table->text('description');
        $table->unsignedInteger('episode_number');
        $table->unsignedInteger('video_id')->unique();
        $table->boolean('premium')->default(0);
        $table->timestamps();

        $table->unique(['series_id', 'episode_number']);
    });
}

Это функция красноречивых отношений в модели уроков:

public function series()
{
    return $this->belongsTo(Series::class);
}

Это мое пользовательское правило проверки:

<?php
namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\DB;

class uniqueSeriesLessonValidation implements Rule
{
public $id;
/**
 * Create a new rule instance.
 *
 * @return void
 */
public function __construct($id)
{
    $this->id = $id;
}

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{
    $count = DB::table('lessons')->where('episode_number', $value)
        ->where('series_id', $this->id)
        ->count();

    if ($count === 0){
        return true;
    }

    return false;

}

/**
 * Get the validation error message.
 *
 * @return string
 */
public function message()
{
    return 'The lesson title should not be repeated in the same series twice.';
}
}

И это моя проверка при создании нового урока, которая прекрасно работает для предотвращения дублирования episode_number урока в одной и той же серии дважды:

public function rules(Request $request)
{
    return [
        'title' => 'required',
        'description' => 'required',
        'episode_number' => ['required',new uniqueSeriesLessonValidation($request->series_by_id->id)],
        'video_id' => 'required|unique:lessons|numeric'
    ];
}

Это моя проверка при обновлении урока,где проблема:

public function rules(Request $request)
{
    return [
        'title' => 'required',
        'description' => 'required',
        'episode_number' => ['required',new uniqueSeriesLessonValidation($request->series_by_id->id),$request->lesson->id],
        'video_id' => 'required'
    ];
}

Ответы [ 2 ]

0 голосов
/ 31 января 2019

спасибо всем, что я решил, добавив второй параметр при обновлении и установив null при создании с изменением правила при получении этого параметра

0 голосов
/ 30 января 2019

Это потому, что он думает $request->lesson->id как отдельная роль.Если вы хотите передать это значение и роли, сделайте это в качестве параметра.

new uniqueSeriesLessonValidation($request->series_by_id->id,$request->lesson->id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...