【问题标题】:CakePHP 3.x - Validation with double associationCakePHP 3.x - 双重关联验证
【发布时间】:2017-11-06 10:17:39
【问题描述】:

我的数据库有产品、商店和分支机构。一个 Branch 属于一个 Shop,一个 Product 属于一个 Shop,但也可以选择属于一个 Branch。

问题:我如何(优雅地)从产品中验证所选分店是否实际上与为产品选择的商店属于同一商店?

我已经在使用 $rules->existsIn 之类的 buildRules 来首先验证所选的 Shops 和 Branches 是否存在。我觉得我应该能够推断出这些函数,因此也可以对这些函数进行交叉检查。

注意: 我特意要求一个验证器。我意识到我可以为 Branches->find('list')->... 调用添加一个约束,这样用户就只能选择正确的那些,但是,拥有一个验证器似乎也是安全的。

【问题讨论】:

    标签: validation associations cakephp-3.0


    【解决方案1】:

    好的,这是我应用的解决方案。我并不完全满意,因为它看起来并不优雅,但它确实有效:

    public function buildRules(RulesChecker $rules)
    {
    
        // ...
    
        $rules->add(function ($entity, $options) {
    
            $branch = $this->Branches->find('all')->where(['Branch.id' => $entity->branch_id])->first();
    
            if (is_null($branch))
                return true;
    
            return $branch->shop_id == $entity->shop_id;
    
        }, 'branchCheck', ['errorField' => 'branch_id', 'message' => 'Branch does not belong to the specified shop']);
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多