CakePHP 3.x - 双重关联验证

时间:2017-06-05 15:29:45

标签: validation associations cakephp-3.0

我的数据库包含产品,商店和分支机构。 A Branch属于商店,产品属于商店,但也可选择属于分支。

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

我已经在使用像sort[1:5,] # Select first five rows sort[1:numb,] # Select first numb rows 这样的buildRules来验证所选的商店和分支机构是否存在于首位。我觉得我应该能够推断这些功能,以便对它们进行交叉检查。

注意:我特别要求验证者。我意识到我可以为$rules->existsIn调用添加约束,因此用户只能选择正确的约束,但是,使用验证器似乎也是安全的。

1 个答案:

答案 0 :(得分:0)

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

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']);
    // ...
}