0

我经常在我的模型和行为中创建小函数,为arrayCakePHP 中的查找操作添加额外的条件,并且我一直在思考三种可能的实现这些函数的方法。它似乎总是归结为三种可能的代码模式。

我将使用一个名为的函数来演示这三种模式,该函数limitErrorCount将为查找查询添加一个额外的规则。

模式#1:参数和返回

public function limitErrorCount(array $conditions)
{
    $conditions['AND'][] = 'Document.errors <'=>10;
    return $conditions;
}

$conditions = array(....);
$conditions = limitErrorCount($conditions);
$records = $this->find('all',$conditions);

模式 #2:通过引用传递

public function limitErrorCount(array &$conditions)
{
    $conditions['AND'][] = 'Document.errors <'=>10;
    return $conditions;
}

$conditions = array(....);
limitErrorCount($conditions);
$records = $this->find('all',$conditions);

模式#3:返回和合并

public function limitErrorCount()
{
    $conditions = array('AND'=>array('Document.errors <'=>10));
    return $conditions;
}

$conditions = array(....);
$conditions = Hash::merge($conditions,limitErrorCount());
$records = $this->find('all',array('conditions'=>$conditions));

所有三种模式都有效。

我想知道这三种方法中哪种方法最好,也许有一些 PHP 专家对为什么它更好的见解。

4

1 回答 1

1

好主意,我希望能像在 jQuery 中那样以链式方式实现它

$cnd = $this->Document->filterFreshOnes()->filterStarred()->filterByDaysAge('3');
$res = $this->Document->find('all', array('conditions'=>$cnd);

但这需要将它保存在模型变量中,如果您忘记已经有一些过滤器,这可能会适得其反...... ;(

于 2013-02-16T20:34:19.513 回答