Laravel Soft Delete Уникальное имя столбца

Предположим, у меня есть таблица категорий, и я использовал мягкое удаление. Теперь я впервые добавил одну категорию «Тест», после чего я удалил эту категорию, чтобы она обновила мой deleted_at столбец из базы данных.

Теперь, когда я снова пытаюсь добавить категорию с именем «Тест», мне говорят, что это имя занято. Я пробовал с правилами, которые размещены Вот.

Но это не работает. Я использовал черту в моей модели. Ниже мой код модели.

<?php
namespace App\Models;

use Illuminate\Support\Facades\Validator as Validator;
use Illuminate\Database\Eloquent\SoftDeletingTrait;

class Category extends \Eloquent {

use SoftDeletingTrait;

protected $dates = ['deleted_at'];

/**
* Guarded fields which are not mass fillable
*
* @var array
*/
protected $guarded = array('id');

/**
* Name of the table used
*
* @var string
*/
protected $table = 'travel_categories';

/**
* Validating input.
*
* @param array $input
* @return mixed (boolean | array)
*/
public static function validate($input, $id = null) {
$rules = array(
'name' => array('required','min:2','max:100','regex:/[a-zA-z ]/','unique:travel_categories,name,NULL,id,deleted_at,NULL'),
'description' => 'Required|Min:2',
'image' => 'image'
);
if ($id) {
$rules['name'] = 'Required|Between:3,64|Unique:travel_categories,name,'.$id;
}

$validation = Validator::make($input,$rules);

return ($validation->passes())?true : $validation->messages();
}
}

1

Решение

Вы поняли цель мягкого удаления? Это только помечает данные как неактивные. Это будет там, хотя.

Таким образом, если вы определяете, что значения этого столбца должны быть уникальными, это правильно, что вы не можете создать другой аналогично.

  • Если он должен быть уникальным, то вы должны restore а также update данные.
  • Если он может иметь много ключей, вы должны удалить уникальный ключ, примененный к нему (и, например, вызвать его по связи).

Смотреть на: Laravel Eloquent Soft Deleting

3

Другие решения

Первое: я не понимаю пару вещей. Вы пытаетесь проверить для создания и обновления? Тогда почему вы позволяете имени иметь длину от 2 до 100 для создания и только от 3 до 64 для после обновлений?

Второе: я рекомендую сбросить это:

protected $dates = ['deleted_at'];

Я не вижу цели этого.

В-третьих, и я подхожу к сути дела, что вы пытаетесь сделать? Я думаю, что вы пытаетесь сделать с этим фильтром 'unique:travel_categories,name,NULL,id,deleted_at,NULL' это проверить уникальность name среди активных категорий. В этом случае это должно работать.

1

По вопросам рекламы [email protected]