Como passar variáveis para um filtro em um conjunto de registros ou coleção

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

  •  28-10-2019
  •  | 
  •  

Pergunta

Portanto, tenho uma variável e um conjunto de registros:

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

Quero filtrar o conjunto de registros:

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

Infelizmente, o fechamento não faz ideia do que é $ firstRecordID.

Como faço para passar o ID?

Foi útil?

Solução

Você pode vincular o $ firstRecordID ao encerramento:

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

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

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

Também simplifiquei seu lambda em uma única linha.

Outras dicas

Talvez seja uma pergunta estúpida, mas por que você está conseguindo filtrar tudo manualmente depois, quando o ODM pode fazer isso diretamente?

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

Mesmo que o resultado não seja muito menor do que all(), parece muito mais claro usando a ferramenta certa para a finalidade certa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top