Laravel Pivottable在company_user表中为具有个人编号和公司的新用户验证唯一性

问题描述

我有一个可以添加用户的系统,该用户本身在公司中有一个个人号码。 因此,我创建了一个具有id,company_id和user_id的pivvottable company_users来存储“ belongsToMany”关系。 在创建新用户的表单中,我必须验证为公司定义的用户的个人号码与同一公司中的其他用户的个人号码不同。 因此,验证并不像在company_users数据透视表上使用unique一样简单。

我正在发送我的$ request->

  • 个人号码(由该人输入的形式)和
  • company_id也由填写表单的人选择。

因此,我需要验证可以使用自己的唯一个人号码和特定公司将这个新用户添加数据库中。

在我的商店方法中:

  ` public function store(Request $request)
     {
     //dd($request);
         $validator = Validator::make($request->all(),[
           //'personalnummer' => ['personalnummer' => new PersonalnummerFirma],'personalnummer' => [],`

我试图弄清楚如何检查,但没有找到解决方法:(

在我的公司控制器中,我有

  public function users() {
    return $this->belongsToMany('App\User');
}

在我的用户控制器中,我有

 public function firmas() {

        return $this->belongsToMany('App\Firma');


}

因为某些老板或员工可以属于不同的公司,而每个公司都有自己的个人号码。

在正常的PHP样式中,我将从数据库获取所有用户并将其保存到数组中,然后在检查数据透视表中是否存在user.personalnumber +给定的$ request-> company.id的同时遍历该数组 company_users->如果是,则验证失败。 如何在Laravel验证中实现该目标,而我无法在store方法中编写该代码: 'personalnummer'=> [$ users = USER:all(); foreach $ users作为$ user ... 我在这里找到了很多带有2个输入字段的示例,这些输入字段必须是唯一的,但是...没有一个带有第三个“变量”的输入字段,这是我尚不存在的用户

谢谢大家!

解决方法

我想说

在我的公司控制器中,我有:

在我的用户控制器中,我有:

您的意思是您在公司用户模型文件中包含该代码。 我认为您已经正确定义了关系。

然后,根据您所说的,我会做类似的事情: (https://laravel.com/docs/7.x/validation#using-closures)-如果您只需要在应用程序中使用一次这种验证器,

Validator::make($request->all(),[
  'personal_number' => [
    function ($attribute,$value,$fail) use ($request) {
      $company = Company::findOrFail($request->input('company_id'));

      if (!$company->users()->get('personal_number')->contains('personal_number',$value)) {
        $fail("Person with personal number {$value} is already registered in company with id {$company->id}");
      }
    }
  ]
]);

如果那不是您的意思,请告诉我。

,

非常感谢,它按预期运行! 我在代码中将“ if not”改为“ if”语句,并获取了[['personal_number'])