2017-06-05 5 views
0

Ma base de données contient des produits, magasins et succursales. Une succursale appartient à une boutique, un produit appartient à une boutique, mais appartient également facultativement à une succursale. Comment puis-je (élégamment) valider à partir d'un produit si la branche sélectionnée est réellement du même magasin que la boutique sélectionnée pour un produit?CakePHP 3.x - Validation avec double association

J'utilise déjà des règles de construction comme $rules->existsIn pour vérifier si les magasins et succursales sélectionnés existent en premier lieu. Je pense que je devrais être en mesure d'extrapoler ces fonctions afin qu'elles soient également vérifiées.

Note: Je demande spécifiquement un validateur. Je me rends compte que je peux ajouter une contrainte à l'appel Branches->find('list')->... afin que l'utilisateur ne puisse sélectionner que les bons, cependant, avoir un validateur semble aussi sûr.

Répondre

0

D'accord, cette solution I que j'ai appliquée. Je ne suis pas entièrement satisfait parce que cela ne semble pas élégant, mais cela fonctionne certainement:

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