php - Laravel 软删除唯一列名

标签 php laravel unique soft-delete

假设我有类别表并且我在上面使用了软删除。现在我第一次添加了一个类别“测试”,之后我删除了这个类别,因此它将更新数据库中的 deleted_at 列。

现在,当我再次尝试添加名称为“Test”的类别时,它告诉我这个名称已被占用。我试过发布的规则 Here .

但它不起作用。我在我的模型中使用了特征。下面是我的模型代码。

<?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();
    }
}

最佳答案

你了解软删除的目的吗?它只会将数据标记为非事件状态。不过它会在那里。

因此,如果您定义该列的值必须是唯一的,那么您就不能创建其他类似的值。

  • 如果它需要是唯一的,那么您应该恢复更新数据。
  • 如果它可以有很多个,那么你应该删除应用在它上面的唯一键(例如通过关系调用它)。

查看:Laravel Eloquent Soft Deleting

关于php - Laravel 软删除唯一列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424294/

相关文章:

php从DIV标签获取值

javascript - chop 给定宽度(以像素为单位)的 php 字符串

php - 在 Centos 6.5 上安装 Mycrypt

添加重复项时引发异常的 .NET 集合

mysql - ON DUPLICATE KEY 添加行

javascript - lodash uniq - 选择要保留在对象数组中的重复对象

php - 从mysql/php获取数据出错

php - Laravel AJAX Post 数组在服务器上变空

php - 使用 Artisan::call() 运行包迁移

php - 将新值保存到 Laravel session 数组