Validation Octobercms验证关系用户

Validation Octobercms验证关系用户,validation,relation,octobercms,Validation,Relation,Octobercms,我与用户模型有以下关系 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/us

我与用户模型有以下关系

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
我正在对
用户
字段进行验证,但它不起作用,即使我已经选择了用户,它仍会继续通知我需要选择该用户

/**
 * @var array Validation rules
 */
public $rules = [
    'user' => 'required'
];

是的,
我能理解你的问题
。只有当您要添加新记录时,才会发生这种情况

它将非常适用于
现有记录
。至于
现有记录
数据是
持久化在数据库中的
,因此我们可以表示一个工作记录,然后我们可以对其进行
关系验证

但对于
新记录
而言,没有ID意味着记录本身未保存在数据库中,因此与该关系字段没有关系,因此我们永远不知道该字段是否附加了某些值,验证将一直失败

因此,无论您添加多少记录,每次都会显示“请选择用户”的
错误

十月CMS使用
差异绑定
您可以看到您可以添加用户而不保存当前记录。由于该数据存储在中间表中,所以在创建记录后,
关系数据将被传输到创建的记录中,因为现在它有了自己的ID并保存在数据库中

因此,对于解决方案您需要在该模型中手动添加验证,
不同的绑定范围

首先
规则

/**
 * @var array Validation rules
 */
public $rules = [
    'user' => 'required' <-- Remove this 
];
现在,验证可以用于两种情况,并且您可以为不同的情况添加不同的验证

现在验证将正常工作


如果您仍然发现问题,请发表评论。

hmm,当您以后端形式设置此配置时,会显示什么样的UI用户字段、下拉列表或顶部带有按钮的列表、创建和链接等。。
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 !']);
        }
    }
}