我的数据库包含产品,商店和分支机构。 A Branch属于商店,产品属于商店,但也可选择属于分支。
问题:如何(优雅地)从产品验证所选分支是否与为产品选择的商店实际上是同一商店?
我已经在使用像sort[1:5,] # Select first five rows
sort[1:numb,] # Select first numb rows
这样的buildRules来验证所选的商店和分支机构是否存在于首位。我觉得我应该能够推断这些功能,以便对它们进行交叉检查。
注意:我特别要求验证者。我意识到我可以为$rules->existsIn
调用添加约束,因此用户只能选择正确的约束,但是,使用验证器似乎也是安全的。
答案 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']);
// ...
}