, , , .
protected $rules = array(
"id" => 'unique_custom:data_groups,id,id=GroupId'
);
Laravel:
public function getGroupIdAttribute() {
return $this->id;
}
:
\Illuminate\Support\Facades\Validator::extend('unique_custom', '\Module\UniqueDataValidator@validate');
src :
<?php
namespace Module;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Concerns\ValidatesAttributes as ValidatesAttributes;
use Illuminate\Validation\Rules\Unique;
class UniqueDataValidator extends Validator
{
use ValidatesAttributes;
protected $custom_messages = array(
'unique_custom' => 'The :attribute field must be unique',
);
public function validate($attribute, $value, $parameters, $validator)
{
$this->requireParameterCount(3, $parameters, 'unique_custom');
list($connection, $table) = $this->parseTable($parameters[0]);
$input = $validator->getData();
$column = $this->getQueryColumn($parameters, $attribute);
$param1 = explode("=", $parameters[1]);
$value = $input[$param1[0]];
$exclude = [];
if (isset($parameters[2])) {
$exclude_values = explode("=", $parameters[2]);
$exclude_value = @$input[$exclude_values[0]];
if (!is_null($exclude_value)) {
$exclude_id = $exclude_values[0];
$exclude_value = $input[$exclude_values[0]];
if (!is_null($exclude_value)) {
$exclude[$exclude_values[0]] = $exclude_value;
}
}
}
$query = DB::table("$table")->where($column, '=', $value);
foreach ($exclude as $key => $value) {
$query->where(function ($query) use ($key, $value) {
$query->where($key, '!=', $value);
});
}
$validator->setCustomMessages($this->custom_messages);
return $query->count() == 0;
}
}
, , Laravel:
use ValidatesAttributes;
$this->validateUnique($attribute, $value, $parameters);