0

array私は自分のモデルとビヘイビアで、CakePHP の検索操作に特別な条件を追加する小さな関数を作成することがよくあります。これらの関数を実装するには、3 つの可能性があると考え続けています。考えられるコードパターンは常に 3 つになるようです。

limitErrorCount検索クエリのルールを追加するa 関数を使用して、これら 3 つのパターンを示します。

パターン #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));

3 つのパターンすべてが機能します。

3 つの方法の中でどの方法が最適なのか疑問に思っています。また、なぜそれが優れているのかについて、専門家の 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 に答える