Пользователь отношения проверки октябрь
У меня есть следующие отношения с моделью пользователя
public $belongsTo = [
'user' => [
'Rainlab\User\Models\User',
'key' => 'user_id',
'order' => 'name asc'
]
];
config_relation.yaml
user:
label: Usuários
view:
form: $/rainlab/user/models/user/fields.yaml
toolbarButtons: create|link
manage:
showSearch: true
showCheckBoxes: true
recordsPerPage: 10
list: $/rainlab/user/models/user/columns.yaml
form: $/rainlab/user/models/user/fields.yaml
Я делаю проверку на user
поле, но оно не работает, хотя я уже выбрал пользователя, он продолжает информировать, что мне нужно выбрать пользователя
/**
* @var array Validation rules
*/
public $rules = [
'user' => 'required'
];
1 ответ
Да, I can Understand your problem
, это произойдет только тогда, когда вы собираетесь добавить новую запись.
Это будет отлично работать для existing record
, что касается existing record
данные persisted in database
так что мы можем представить рабочую запись, а затем мы можем уволить relational validation
в теме.
но для new record
нет идентификатора значит запись it self
не сохраняется в базе данных, поэтому не будет никакой связи с этим реляционным полем, поэтому мы никогда не знаем, к какому полю это имеет какое-либо значение или нет, и проверка будет терпеть неудачу все время.
поэтому независимо от того, сколько записей вы добавите, он покажет ERROR each time
что "пожалуйста, выберите пользователя".
Использование CMS в октябре differ binding
Вы можете видеть, что можете добавлять пользователей без сохранения текущей записи. как эти данные хранятся в промежуточной таблице, так что после создания записи, что relation data will be transferred to created record
потому что теперь у него есть it's own ID and persisted in database
,
поэтому для решения вам нужно добавить проверку вручную внутри этой модели, с
differed binding scope
,
Сначала удалите поле user
от rules
/**
* @var array Validation rules
*/
public $rules = [
'user' => 'required' <-- Remove this
];
Сейчас сделаем manual validation
Добавь это
code
на вашmodel
public function beforeValidate() {
// we need to check record is created or not
if($this->id == NULL) {
// CREATE CASE
// we need to use differ binding scope as this record is not saved yet.
if($this->user()->withDeferred(post('_session_key'))->count() == 0) {
throw new \ValidationException(['user' => 'We need User !']);
}
}
else {
// UPDATE CASE
// now record is created so we dont need differ binding
if($this->user()->count() == 0) {
throw new \ValidationException(['user' => 'We need User !']);
}
}
}
Теперь валидация может работать на both case
и вы можете добавить различные проверки для different cases
,
Теперь проверка будет работать правильно.
если вы все еще найдете проблему, пожалуйста, прокомментируйте.