2015-06-08 31 views
0

我有一個模型結構是:CakePHP深入(多個相關模型)驗證?

Organization屬於關聯Address屬於關聯CountryCode

所以,Organization有外鍵:mailing_address_idphysical_address_id

Address有外鍵:country_code_id

Organization模型,關係定義爲:

public $belongsTo = array(
     'MailingAddress' => array('className'=>'Address', 'foreignKey'=>'mailing_address_id') 
     , 'PhysicalAddress' => array('className'=>'Address', 'foreignKey'=>'physical_address_id') 
); 

這似乎是偉大的工作 - 驗證是否正常等

Address模型,關係被定義爲:

public $belongsTo = array(
     'CountryCode' => array('className'=>'CountryCode', 'foreignKey'=>'country_code_id') 
    ); 

在我OrganizationsController,在一個函數來創建一個新組織,我正在使用此代碼測試驗證:

if($this->Organization->saveAll(
     $data, array('validate'=>'only') 
    )) { 
     // Validates 
     $this->DBG('Org validated.'); 
    } else { 
     // does not validate 
     $this->DBG('Org NOT NOT NOT validated.'.print_r($this->Organization->invalidFields(),true)); 
    } 

$data數組看起來像這樣進入驗證。

2015-06-08 21:03:38 Debug: Array 
(
    [Organization] => Array 
     (
      [name] => Test Organization 
     ) 

    [MailingAddress] => Array 
     (
      [line1] => 100 Main Street 
      [line2] => 
      [city] => Houston 
      [state] => TX 
      [postal_code] => 77002 
      [CountryCode] => Array 
       (
        [name] => United St 
       ) 

     ) 

    [PhysicalAddress] => Array 
     (
      [line1] => 100 Main Street 
      [line2] => 
      [city] => Houston 
      [state] => TX 
      [postal_code] => 77002 
      [CountryCode] => Array 
       (
        [name] => United St 
       ) 

     ) 

) 

的國家代碼不應該與我在CountryCode模型設置的規則驗證:

public $validate = array(
    'name' => array(
     'nonemptyRule' => array(
      'rule' => 'notEmpty' 
      ,'required' => 'create' 
      ,'message' => 'Must be provided.' 
     ) 
     ,'dupeRule' => array(
      'rule' => array('isUnique', array('name','code'), false) 
      ,'message' => 'Duplicate' 
     ) 
    ) 
    ,'code' => array(
     'rule' => 'notEmpty' 
     ,'required' => 'create' 
     ,'message' => 'Must be provided.' 
    ) 
); 

然而,驗證通過對Organization->saveAll

此外,如果我嘗試從OrganizationController訪問CountryCode模型,則它不會被加載。

如:

$this->Organization->MailingAddress->CountryCode->invalidate('name','Invalid!'); 

在這種情況下,我得到一個錯誤,CountryCodenull

任何想法爲什麼CountryCode不會驗證或加載?

驗證應該工作兩步之遙?

回答

0

事實證明,有一個選項時驗證(和保存)。它記錄在這裏與白水選項:

http://book.cakephp.org/2.0/en/models/saving-your-data.html

所以,問題的驗證模塊工作得很好,如果你包括選項,如下所示:

if($this->Organization->saveAll(
    $data, array('validate'=>'only', 'deep'=>true) 
)) { 
    // Validates 
    $this->DBG('Org validated.'); 
} else { 
    // does not validate 
    $this->DBG('Org NOT NOT NOT validated.'.print_r($this->Organization->invalidFields(),true)); 
}