gpt4 book ai didi

php - 如何在 laravel 5.3 中忽略 laravel 多个唯一列中的软删除

转载 作者:行者123 更新时间:2023-11-29 02:46:39 25 4
gpt4 key购买 nike

我现在一直在做一个项目。在这一点上,我被困住了。我只想在我的验证中忽略 laravel 的软删除,它具有唯一的名称列 parent_id。

例如:假设 A & B 是类别。我希望如果 C 是 A 的子类别,那么没有其他 C 数据不写在 A 中。但是 C 可以写在 B 类别中。

我还希望如果用户软删除数据,那么他可以插入具有相同名称和相同类别的相同数据。

我的 table 是

Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('parent_id')->nullable()->default(0);
$table->integer('admin_id')->nullable()->default(0);
$table->boolean('active')->nullable()->default(1);
$table->unique(array('parent_id', 'name', 'deleted_at'));
$table->rememberToken();
$table->timestamps();
$table->softDeletes();
});

我的 Store 方法是

public function store(Request $request)
{
$this->validate($request, [
'category' => 'required|unique:categories,parent_id,NULL,name,NULL,id,deleted_at,NULL',
'parent' => 'required',
'_token' => '',
]);

try {
$category = New Category();
$category->name = $request['category'];
$category->parent_id = $request['parent'];
$category->remember_token = $request['_token'];
$category->save();
$request->session()->flash('alert-success', 'Sub Category Successfully Created!');
return redirect('subcategory');
} catch(\Illuminate\Database\QueryException $e) {
return redirect()->back()
->with('status','<strong>'.$category.' already exist!</strong>');
}
}

我的模型是

<?php
namespace App;
use Illuminate\Notifications\Notifiable;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Category extends Model
{
use Notifiable;
use SoftDeletes;
protected $fillable = [
'category',
];
protected $dates = ['deleted_at'];
}

错误是 It Gives This error

最佳答案

尝试

‘category' => 'required|unique:categories,parent_id,NULL,id,deleted_at,NULL,name,’.$request['category'], 

有关更多详细信息,请将参数分成对:

  1. [类别,parent_id]

    • 这意味着应在表 categoriesparent_id 列中实现唯一规则。
    • 如果parent_id的位置与左边的“category”相同,则可以忽略。例如

      ‘name’ => ‘unique:products,name’ 可以简化为

      ‘name’ => ‘unique:products’。

  2. [NULL, id]

    • unique 规则应排除 id 为 null 的项目。
    • 这看起来像废话,因为 id 不能为 null。
    • 但这对很特别。在 Laravel 唯一验证(vendor/laravel/framework/src/Illuminate/Validation/Concerns/ValidatesAttributes.php:getUniqueIds())中,它定义了参数第三个位置的特殊参数。只要你想在之后附加其他约束,你就需要这个。就像一种格式。
    • 再说一次,这是一对特别的。在更新验证中,您可以传入 id 以忽略更新的项目本身。
  3. [deleted_at, NULL]

    • 唯一规则应该在 deleted_at 为 null 的范围内实现。
    • 这是您考虑软删除的地方。
    • 您可以使用 NOT_NULL 表示相反的意思。

因此,执行唯一规则的最终范围是从以下查询得到的结果:

    Select count(*) from categories
where id is not null
and deleted_at is null
and name is ??$request['category']??

如果 count(*) 为 0,则验证通过。否则,失败。

在第三对之后,您可以根据需要设置任意数量的约束。比如:

=> 4. [事件,真实]

=> 5. [name, hello] name不是'hello'的地方可以用'!hello'表示

关于php - 如何在 laravel 5.3 中忽略 laravel 多个唯一列中的软删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com