如何在laravel 5.5中使用3个或更多带有Db名称的参数进行自定义验证

时间:2019-02-15 02:26:13

标签: laravel-5.5

我可以制定并使用规则在laravel 5.5+中进行验证,但我需要使用除$ attribute,$ value,$ id(即$ flag),另一个属性甚至Db本身以外的更多参数进行验证,例如唯一的验证但多一点不同

我已经在互联网上搜索,没有人完成

public function __construct($id)
{
    $this->id = $id;
}

public function passes($attribute, $value)
{
    $modal = ledger::where('id', $this->id)->first();

    $ledger = ledger::where('id','!=', $modal->id )->where(['fk_id'=>"$modal->fk_id", 'flag'=>'1', $attribute=>$value])->first();

    if($ledger == 'null')
    {
        return true;
    }
}

我希望Db_name,标志值和属性fk_id可通过输入替换。

1 个答案:

答案 0 :(得分:1)

我已经有了答案

在我的控制器中,我使用此

 public function update(Request $request, $id)
 {
    $this->validate($request, [
       'mssl_kode' => [new msslRules($id, 'ledger', 'id', 'fk_id', 'flag')],
    ]);

    //others script
}

然后按照我的规则使用

public function __construct($id, $db, $id2, $fkid, $flag)
{
    $this->id = $id;
    $this->db = "\\App\\".$db;
    $this->id2 = $id2;
    $this->fkid = $fkid;
    $this->flag = $flag;
}

public function passes($attribute, $value)
{
    $id2 = $this->id2;
    $fkid = $this->fkid;

    $modal = $this->db::where($id2, $this->id)->first();

    $ledger = $this->db::where($id2,'!=', $modal->$id2 )->where([$fkid=>$modal->$fkid, $this->flag=>'1', $attribute=>$value])->first();

    if($ledger == null)
    {
        return true;
    }else 
    {
        return false;
    }
}

我希望对其他人有帮助