Похоже, у вас есть куча отзывов, и вы хотите усреднить их на лету, когда кто-то ищет, это правильно? Если это так, я думаю, что было бы лучше сохранить усредненные оценки как поля в модели Книги.
Причина, по которой я это говорю, заключается в том, что, скорее всего, ваше приложение будет выполнять больше поиска, чем сохранять отзывы, и, вероятно, более важно, чтобы результаты поиска возвращались быстрее, чем отзывы, сохраненные быстро.
Однако, если вы хотите вычислить эти средние значения на лету, вы можете использовать функцию MySQL AVG (). Посмотрите этот пост, чтобы найти пример, который, на мой взгляд, довольно близок к вашей ситуации:
MySQL - Могу ли я объединить эти 2 оператора SQL? Объединить JOIN и AVG?
Кроме того, это ситуация, когда я, вероятно, просто напишу SQL и вставлю его в query()
, а не пытаюсь бороться с синтаксисом ORM в Cake:
http://book.cakephp.org/view/456/query