Come gestire il concatenamento dei metodi e il ritorno nullo per i modelli Laravel

2

Se sto caricando un modello con Model :: find ($ id) e l'id non viene trovato restituisce null.

Questo va bene, tranne se provo a concatenare le cose.

Model::find($id)->loadAttributes();

Gli attributi di caricamento falliscono perché non è un metodo di null.

La soluzione semplice lo suddivide in due righe e controlla se è null prima di chiamare loadAttributes o fare un try / catch ma sono curioso di sapere se c'è un'altra soluzione a cui non sto pensando.

    
posta mkaatman 23.09.2016 - 16:47
fonte

1 risposta

1

Se non riesci a concatenare i metodi, non praticare il concatenamento dei metodi.

$model = Model::find($id);
if ($model === null) {
  ... // handle error
}

$model->loadAttributes();

Questo è probabilmente il modo meno incline agli errori per farlo. Se il caso zero è previsto nel normale corso dell'operazione, non utilizzare il sistema di eccezione per gestirlo.

PHP 7 aggiunge un operatore coalescente null ?? , ma non un operatore di chiamata del metodo di propagazione null (ad esempio ?. in C #). Con un operatore di questo tipo , una chiamata $a?->b() potrebbe essere equivalente a $a === null ? $a->b() : null .

Un idioma che a volte potresti vedere sta assegnando la variabile all'interno della condizione:

if (($model = Model::find($id)) !== null) {
  $model->loadAttributes();
} else {
  ... // handle error
}

Questo stile ha più senso in altre lingue dove ciò restringerebbe anche l'ambito della variabile assegnata al condizionale, e quando non vi è alcuna gestione degli errori - se il valore di ritorno è nullo, non c'è niente da fare.

    
risposta data 23.09.2016 - 17:53
fonte

Leggi altre domande sui tag