Laravel 5多表独特验证

Nit*_*oon 6 php validation laravel-5

例如,我有2个表:sites1sites2

我需要检查url来自我的html表单的字段是否唯一.

这是我的验证规则:

public function rules()
    {
        return [
            'url' => unique:sites1|unique:sites2'
        ];
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,此规则仅适用于sites2表格.有没有可能的方法来验证两个表?

Zam*_*ara 7

您的验证规则似乎没问题.只需确保两者sites1sites2表都具有字段名称,url并且两者都在同一个数据库中.

您的unique:sites1规则将被翻译为SQL

select count(*) as aggregate from `sites1` where `url` = ?
Run Code Online (Sandbox Code Playgroud)

虽然unique:sites2规则将被翻译成SQL

select count(*) as aggregate from `sites2` where `url` = ?
Run Code Online (Sandbox Code Playgroud)

查看第一个SQL是否返回结果.如果使用有限的索引长度,长URL可能会导致非唯一.如果您可以存储URL的哈希值,那么您可以更好地使用哈希来比较URL.


小智 6

无需在两个不同的表中保持相同的名称

在laravel 4.2

Validator::make(Input::all, [
    'url' => 'unique:site1,your_column_name|unique:site2:your_column_name_2'
]);
Run Code Online (Sandbox Code Playgroud)

Laravel 5.*:

$this->validate($request,[
    'url' => 'unique:site1,your_column_name|unique:site2:your_column_name_2'
]);
Run Code Online (Sandbox Code Playgroud)

希望它工作正常.