如何将变量传递到记录集或集合的过滤器中

时间:2012-02-21 09:47:38

标签: php lithium

所以我有一个变量和一个记录集:

$firstRecordID = 1;
$records = Recordset::all();

我想过滤记录集:

$filteredRecords = $records->find(function($record){
    if($record->id == $firstRecordID)
        return true;
    else
        return false;
});

不幸的是,闭包不知道$ firstRecordID是什么。

如何传入ID?

2 个答案:

答案 0 :(得分:4)

您可以将$ firstRecordID绑定到闭包:

$firstRecordID = 1;
$records = Recordset::all();

$filterFunction = function ($record) use ($firstRecordID) {
    return ($record->id == $firstRecordID);
};

$filteredRecords = $records->find($filterFunction);

我还将你的lambda简化为一行。

答案 1 :(得分:1)

这可能是一个愚蠢的问题,但是为什么在ODM可以直接执行此操作后,您手动过滤所有内容?

$records = Recordset::all(array(
    'conditions' => array(
        'id' => array('<>' => $firstRecordID)
    )
));

即使结果不比使用all()小得多,使用正确的工具也可以看起来更清洁。