0

我有以下型号:

  1. 公司(ID,名称)
  2. Employee(id, name, 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 的默认行为吗?如何处理?我正在使用 Cakephp 2.8.4

4

1 回答 1

1

我无法告诉你被覆盖的模型中的条件是否是 CakePHP 的默认行为。但是,我可以为您提供一个可能的选择:

通过在模型中使用beforeFind()回调,您可以添加您的'Employee.isRemoved' => 0条件。

因此,在您的Company模型中,您可以执行以下操作:

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;
}

免责声明:我没有测试此代码。

来源:https ://stackoverflow.com/a/17544106/6786476

于 2016-09-05T07:24:48.153 回答