2013-10-28 2 views
0

Я начинаю использовать фреймворк PHP, такой как Laravel или CodeIgniter. И я думаю, что понял основную.Сохранение объектов контроллеров для разных моделей

Вот мой пример.

Признайтесь, что после Идент.польза, мы идем:

mysite.fr/username/ 

И тогда я загрузить все книги, которые этот пользователь написали из моей базы данных.

so the username/index controllers call the books models. 

Затем пользователь может нажать на кнопку фильтра, чтобы отобразить только книги для детей, так что URI будет:

mysite.fr/username/books/kids 

Здесь модель книги будет сделать новый запрос, чтобы найти все книги, где категории = «ДЕТИ»

Что я думаю плохо, потому что мы уже загрузили все книги раньше! Поэтому нам не нужно создавать новый запрос, а применять фильтр только к объекту Books!

Есть ли все-таки сохранить модель в контроллере, а затем получить доступ к ней с РАЗЛИЧНЫХ контроллеров без необходимости воссоздать весь объект?

Что я хотел бы сделать, это:

username/index 
    Books already loaded ? call the view with Book object : make the query 
username/books/categories 
    Books already loaded ? call the view for categories : make the query for this categories 

Может быть, это не совсем в духе ООП, но зачем quering для Infos, что у нас уже есть ??

Единственный способ, который я вижу, чтобы сохранить модель в файле ... но не очень эффективно.

Большое спасибо за вашу помощь и простите мой английский, а не мой основной язык ...

+2

Вы загружены все книги в первом запросе, но (если не использовать некоторые формы кэширования) они выгружаются, когда сценарий завершается ... так «Книги уже загружен» не имеет смысла ... это не так неэффективно, как вы, кажется, думаете, это очень хорошо работает для миллионов сайтов PHP до сих пор, не вызывая проблем –

ответ

2

В Laravel вы можете просто кэшировать результаты: Cache::put($key, $value), Cache::get($key). Или же вы можете использовать кэширование запросов, просто цепочки метод ->remember() на конец вашего запроса.

заказ Caching заказ Query caching

+0

Да, как предложил @MarkBaker, и поэтому вы, я посмотрю на эту функциональность. Благодарю. – pierreaurelemartin

Смежные вопросы