Как принудительно обновить данные на уникальном пользовательском контроле проверки - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в Laravel.У меня есть таблица с menu_id и заголовком, я пытался сделать это поле заголовка уникальным, если у него одинаковый menu_id.Я нашел решение здесь

Но у меня возникла проблема при обновлении.Может кто-нибудь помочь, пожалуйста?Мой код

Validator::extend('unique_custom', function ($attribute, $value, $parameters)
{
    // Get the parameters passed to the rule
    list($table, $field, $field2, $field2Value) = $parameters;

    // Check the table and return true only if there are no entries matching
    // both the first field name and the user input value as well as
    // the second field name and the second field value
    return \DB::table($table)->where($field, $value)->where($field2, $field2Value)->count() == 0;
});

public function updateSubmenu( Request $request) {
    $this->validate( $request, [
            'menu_id' => 'required',
            'title' => 'required|unique_custom:posts,title,menu_id,'.$request->menu_id,
            'order_by' => 'required|integer',
            'description' => 'required'
        ],
        [
            'title.unique_custom' => 'This title already token'
        ]
    );
}

1 Ответ

0 голосов
/ 20 мая 2018

Можете ли вы объяснить, какая проблема возникла при обновлении?Некоторое исключение?

Редактировать: Если вы не можете обновить запись, если заголовок не меняется, вам нужно добавить одно условие в Validator:

Validator::extend('unique_custom', function ($attribute, $value, $parameters)
{
    // Get the parameters passed to the rule
    list($table, $field, $field2, $field2Value) = $parameters;

    // If old value not changed, don't check its unique.
    $current = \DB::table($table)->where('title')->first();
    if( $current->{$field} == $value) {
        return true;
    }
    return \DB::table($table)->where($field, $value)->where($field2, $field2Value)->count() == 0;
});
...