Предположим, у меня есть таблица категорий, и я использовал мягкое удаление. Теперь я впервые добавил одну категорию «Тест», после чего я удалил эту категорию, чтобы она обновила мой 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();
}
}
Вы поняли цель мягкого удаления? Это только помечает данные как неактивные. Это будет там, хотя.
Таким образом, если вы определяете, что значения этого столбца должны быть уникальными, это правильно, что вы не можете создать другой аналогично.
restore
а также update
данные.Смотреть на: Laravel Eloquent Soft Deleting
Первое: я не понимаю пару вещей. Вы пытаетесь проверить для создания и обновления? Тогда почему вы позволяете имени иметь длину от 2 до 100 для создания и только от 3 до 64 для после обновлений?
Второе: я рекомендую сбросить это:
protected $dates = ['deleted_at'];
Я не вижу цели этого.
В-третьих, и я подхожу к сути дела, что вы пытаетесь сделать? Я думаю, что вы пытаетесь сделать с этим фильтром 'unique:travel_categories,name,NULL,id,deleted_at,NULL'
это проверить уникальность name
среди активных категорий. В этом случае это должно работать.