2016-08-31 18 views
0

に含まれ使用して検索:CakePHPの:私は次のモデルを持っている状態

  1. カンパニー(ID、名前)
  2. 従業員(ID、名前、のcompany_id、isRemoved)[当社は、多くの従業員を擁しています]
指定された団体で

、従業員は

public $hasMany = array(
     'Employee' => array(
     'className' => 'Employee', 
     'foreignKey' => 'company_id', 
     'dependent' => true, 
     'conditions' => array(
      'Employee.isRemoved' => 0 
     ), 
    ) 
); 

関連があることを、デフォルトの状態を持っています従業員のデフォルト条件は削除されません。私は、その名の文字列に一致する従業員のみを取得するには、会社に照会を探す以下を使用しています:

$this->Company->find('all', array(
    'contain' => array(
     'Employee' => array(
      'conditions' => array(
       'Employee.name LIKE' => '%'.$search_text.'%') 
      ), 
      'fields' => array('Employee.id, Employee.name') 
     ) 
    ) 
)); 

私が直面しています問題は、私が含まれている範囲内の条件を使用すると、関連して指定されたデフォルトの状態である、ということです適用されず、条件キーが指定されていない場合、関連で指定されたデフォルト条件が適用されます。

これはCakephpのデフォルトの動作とその進め方ですか?私はCakePH 2.8.4を使用しています。

答えて

1

モデルの条件が上書きされている状態がCakePHPのデフォルトの動作であるかどうかはわかりません。しかし、私は可能な代替案を提供することができます:

あなたのモデルにコールバックを使用すると、'Employee.isRemoved' => 0条件を追加することができます。

function beforeFind(array $queryData) { 
    if(isset($queryData['contain']['Employee'])) { 
     //Notice the extra [] to not overwrite the conditions set in the controller 
     $queryData['contain']['Employee']['conditions'][]['Employee.isRemoved'] = 0; 
    } 
    return $queryData; 
} 

免責事項:私はこのコードをテストしていない

だからあなたCompanyモデルでは、あなたのような何かを行うことができます。

出典:https://stackoverflow.com/a/17544106/6786476