通过以Laravel形式输入验证忽略SoftDelete项目,唯一的验证



如何通过忽略laravel中的软删除项目对给定输入的唯一验证?谁可以回答我?

您可以在规则中添加条件,基本上用deleted_at == NULL过滤结果:

$request->validate([
    'foo' => 'exists:table,column,deleted_at,NULL',
]);

泰勒本人就github问题回答了这个问题。

您还可以创建自定义验证规则:

<?php
namespace AppRules;
use IlluminateContractsValidationRule;
class UniqueWithoutSoftDelete implements Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // Your logic goes here
        // Return true to pass the validation
        // ie: return Model::where($attribute, $value)->exists();
    }
    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'The :attribute must be unique.';
    }
}

在您的控制器中实现它:

use AppRulesUniqueWithoutSoftDelete;

和您的控制器方法:

$request->validate([
    'foo' => ['required', new UniqueWithoutSoftDelete],
]);

希望这对您有帮助。

我以另一种方式解决了它...在请求类中,编写以下代码:public function rules() { switch ( $this->method() ){ case 'POST': return [ 'currency_id' => ['required', Rule::unique('company_currencies')->where(function ($query) { $query->where('deleted_at', Null); }) ], ]; break; }

且在类文件的顶部 use IlluminateValidationRule;

相关内容

  • 没有找到相关文章

最新更新