Laravel 每个公司的唯一部门

Laravel unique department for each company

我有一个 table 命名部门,其中 2 列 1.名称 2.公司,我想对单个公司的名称应用验证。

 public function store(Request $request)
 {
    $company = Auth::user()->company_id;
    $this->validate($request, [
        'company'=>'unique:departments,company',
    ]);

    $department = Department::create([
        'name' => $request->name,
        'company' => $request->company,
    ]);
  }

部门的预期结果是

name      company
======================
Accounts    1
Purchase    1
Accounts    2
Sales       2
Accounts    2  //wrong i want validation here
Purchase    1  //wrong i want validation here

这是唯一验证的格式 unique:table,column,except,idColumn 详细信息 https://laravel.com/docs/5.6/validation#rule-unique。 并添加额外的 where 条件,它将像这样 unique:table,column,except,idColumn,anotherColumn,anotherColumnValue

对部门名称添加验证

public function store(Request $request)
{
    //If getting company from request 
    $company = $request->company;

    //if getting company from auth user
    $company = Auth::user()->company_id;

    $request->validate([
        'name' => 'required|max:255|unique:departments,name,NULL,id,company,'. $company
    ]);

    $department = Department::create([
        'name' => $request->name,
        'company' => $company,
    ]);
}

注意:最好将部门中的 company 列名称更改为 company_id,因为您要在其中存储公司 ID。

所以,关系是多对多?每个公司都有相同的部门组。 我建议建立新关系 table。将是 company_department,至少包含 2 列:department_idcompany_id - 这样,您将轻松管理数据,也可以轻松查询以访问数据库。 希望有用。