2017-06-05 137 views
0

我的數據庫包含產品,商店和分支機構。一個分支屬於一個商店,一個商品屬於一個商店,但也可以選擇屬於一個分支。CakePHP 3.x - 雙重關聯驗證

問題:我如何(優雅地)從產品驗證所選分支是否實際上與爲產品選擇的商店相同?

我已經在使用像$rules->existsIn這樣的buildRules來驗證所選的Shops和Branches是否存在於第一位。我覺得我應該能夠推斷這些功能,所以這些也是交叉檢查。

注:我特別要求驗證。我意識到我可以給Branches->find('list')->...調用添加一個約束,所以用戶只能選擇正確的約束,但是驗證器似乎也是安全的。

回答

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