use*_*415 7 laravel laravel-validation laravel-5.1
在文档中,我看到你可以为唯一的规则设置一个很好的连接.但是,存在似乎没有遵循相同的逻辑.以此为例:
$rules = [
'username' => 'required|max:40|unique:user',
'name' => 'sometimes|required',
'email' => 'required|email|max:255|unique:int.user',
'password' => 'sometimes|required|confirmed|min:6',
'password_current' => 'sometimes|required'
];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,唯一规则适用于GREAT.它使用名为'int'的数据库连接并调用用户表.然而,当规则被颠倒时,如下:
$rules['email'] = 'required|email|max:255|exists:int.user';
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
SQLSTATE [42S02]:未找到基表或视图:1146表'int.user'不存在(SQL:从int.user中选择count(*)作为聚合,其中email = haleybuggs6@gmail.com)
它试图调用int.user表而不是使用int数据库连接.
是否有存在的理由与独特的行为不同?谢谢.
小智 13
您可以尝试使用"int"连接中定义的直接数据库名称,而不是使用连接名称.遇到类似的问题,这些方式对我有用.喜欢
$rules['email'] = 'required|email|max:255|exists:DB_Name.user';
Run Code Online (Sandbox Code Playgroud)
您可以使用
'email' => 'exists:mysql2.users|required'
Run Code Online (Sandbox Code Playgroud)
其中 mysql2 是 database.php 文件中的第二个数据库设置数组
小智 6
尝试一下。
$rules = [
'username' => 'required|max:40|unique:connection_name.user',
'name' => 'sometimes|required',
'email' => 'required|email|max:255|unique:connection_name.user',
'password' => 'sometimes|required|confirmed|min:6',
'password_current' => 'sometimes|required'
];
Run Code Online (Sandbox Code Playgroud)
最终,对于 Laravel 5.6.*,您需要查看您尝试验证的模型的现有实例,或指定...
{db_connection_name}.{schema_name}.{table_name}
...以确保您正在查看正确的表格。
<?php
// for instance...
// maybe auth user is in a different db
// = so you cannot validate with your default db connection
$default_user = Auth::user();
// pass the instance in order to allow Validator to qualify the proper connection/name
\App\Validation\User::validate($_POST, $default_user);
Run Code Online (Sandbox Code Playgroud)
<?php
namespace App\Validation;
class User extends Validator
{
/**
* @param \Illuminate\Database\Eloquent\Model|string $mixed
* @param string $default
* @return string
*/
public static function table($mixed,$default='default_connection.app_schema.users_table')
{
if($mixed instanceof \Illuminate\Database\Eloquent\Model){
$table = $mixed->getConnectionName().'.'.$mixed->getTable();
} else {
if (! empty($mixed)) {
$table = $mixed;
} else {
$table = $default;
}
}
return $table;
}
/**
* validation to create a new user
*
* @param array $data
* @param \App\User|string $mixed
* @return array
* @throws \Illuminate\Validation\ValidationException
*/
public static function validate(array $data, $mixed='default_connection.app_schema.users_table'){
return Validator::validate($data,[
'username' => 'required|max:40|unique:'.self::table($mixed),
'name' => 'sometimes|required',
'email' => 'required|email|max:255|unique:'.self::table($mixed),
'password' => 'sometimes|required|confirmed|min:6',
'password_current' => 'sometimes|required'
]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |