Cómo pasar variables a un filtro en un conjunto de registros o colección

StackOverflow https://stackoverflow.com/questions/9375305

  •  28-10-2019
  •  | 
  •  

Pregunta

Entonces tengo una variable y un conjunto de registros:

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

Quiero filtrar el conjunto de registros:

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

Desafortunadamente, el cierre no tiene idea de qué es $ firstRecordID.

¿Cómo paso la identificación?

¿Fue útil?

Solución

Puede vincular $ firstRecordID al cierre:

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

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

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

También simplifiqué tu lambda en una sola línea.

Otros consejos

Tal vez sea una pregunta estúpida, pero ¿por qué está haciendo que todo se filtre después manualmente cuando el ODM puede hacerlo directamente?

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

Incluso si el resultado no es mucho más pequeño que al hacer all(), se ve mucho más limpio si se usa la herramienta adecuada para el propósito correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top