Обратный вызов CakePHP Model::afterFind()
выглядит следующим образом:
afterFind(array $results, boolean $primary = false)
Согласно документации:
Параметр
$primary
указывает, была ли текущая модель моделью, на которой возник запрос, или была ли эта модель запрошена как ассоциация. Если модель запрашивается как ассоциация, формат$results
может отличаться.
Они могут отличаться, но эксперименты показывают, что они не всегда различаются. Насколько я могу судить, параметр $primary
на самом деле не является полезным. Если он установлен на false
, вы можете или не можете получить сглаженную структуру данных, поэтому вы можете или не можете завершить сообщение об ошибке "не можете использовать строковое смещение как массив".
Хотя я еще не пробовал, моя мысль, основанная на документации, заключалась в том, чтобы игнорировать флаг $primary
вообще и просто проверить данные:
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;
}
Это хаки, и мне это не нравится, но, похоже, оно более полезно, чем $primary
.
Явно заявляю, что мои вопросы:
- Что такое флаг
$primary
, который действительно полезен для? - Правильно ли, что это не полезно для определения структуры массива
$results
или я что-то пропустил там?