CakePHP za Model::afterFind()
zwrotna wygląda następująco:
afterFind(array $results, boolean $primary = false)
Zgodnie z dokumentacją:
Parametr
$primary
wskazuje, czy obecny model był modelem, że zapytanie pochodzi lub czy ten model został zapytany jako stowarzyszenie. Jeśli model jest sprawdzany jako skojarzenie, format$results
może się różnić.
one może różnić, ale eksperyment pokazuje, że nie zawszeróżnią. O ile mogę powiedzieć, parametr $primary
nie jest tak naprawdę użyteczny. Jeśli jest ustawiony na false
, możesz uzyskać nie spłaszczoną strukturę danych, więc możesz skończyć z komunikatem o błędzie "Nie można użyć przesunięcia łańcucha jako tablicy".
Chociaż nie próbowałem tego jeszcze, moja myśl na podstawie dokumentacji było zignorować flagę $primary
całkowicie i po prostu sprawdzić dane:
public function afterFind($results, $primary = false) {
if (array_key_exists(0, $results) {
// operate on $results[0]['User']['fieldname']
} else {
// operate on $results['fieldname']
}
return $results;
}
To hackish a ja się nie podoba, ale wydaje się bardziej przydatne niż $primary
.
wyraźnie stwierdził, moje pytania są następujące:
- Co jest flaga
$primary
rzeczywiście przydatna? - Czy mam rację, że jest to nie przydatne do określenia struktury macierzy
$results
, czy też coś tam przeoczyłem?
Dzisiaj wpadł w ten problem. Czasami zestaw $ result jest tablicą wielowymiarową, czasami nie jest. Czuję, że to powinien być dość duży problem. – vinhboy
Wow, mógłbym cię pocałować. To właśnie uratowało mnie po uderzeniu w głowę przez 4 godziny. – bowlerae