У меня есть две модели: Movies(id,title,director) и Ratings(id,movie_id,rating[0-10]).
Они связаны как одна ко многим, т.к. одно кино может иметь много рейтингов.
В Movies есть метод, который собирает все рейтинги и считает их средний показатель для объекта Movie - getRating();
Предыстория. Изначально я вытаскивал все фильмы благодаря find_all() и биндил их на View. Для последующей генерации таблицы. В таблице есть поле рейтинг, которое и должно его отображать. Я пошел простым путем и вызывал из View, метод модели getRating() для каждого обьекта Movie.
Все то было нормально, пока не зародилось сомнение. Я вызываю метод модели из отображения. Да ведь не нормально это, ведь паттерн MVC на то и предназначен, что бы все это дело по полочкам разложить. И стал я пытаться все это в контроллер или модель перенести, да ничего не получается.
Создал я в модели свойства $rating, что бы там рейтинг хранить. Функция getRating теперь меняет $this->rating у объекта, что бы потом его в View использовать. Да как вызвать его не представляю. Пробовал так:
Код:
$movies = ORM::factory('Movie')->find_all();
foreach ($movies as $movie)
{
$movie->getRating();
}
$view = View::factory('movie_table')
->bind('movies', $movies);
По идеи должен быть заменить значение $rating в каждом из объектов, да не меняет нифига. Потом через символические ссылки пробовал:
Код:
$movies = ORM::factory('Movie')->find_all();
foreach ($movies as &$movie)
{
$movie->rating = $movie->getRating();
}
$view = View::factory('movie_table')
->bind('movies', $movies);
То же ни в какую. Я стал думать над тем, что бы автоматически считать значение $rating при вызове модели, но не представляю как это сделать.
Подскажите старцы, что я делаю не так?
UPD: Короче, суть - передать во View, объект с заранее посчитаным рейтингом.