Laravel 4 и кеширование запросов - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > Полезное / Common > Программирование / Programming > PHP

PHP Форум как для начинающих программистов на PHP так и для профессионалов этого дела. Если нужно создать скрипт, функцию и т.д, но не знаете как, спросите у нас и мы вам подскажем. Здесь вы найдете примеры скриптов которые вы сможете использовать на сайтах своих серверов (онлайн, регистрация, семь печатей, топ игроков). Так же много книг и статей.

Ответ
Опции темы
Непрочитано 25.10.2014, 20:53   #1
Пользователь

Автор темы (Топик Стартер) Laravel 4 и кеширование запросов

Недавно присмотрел фреймворк Laravel и захотелось разобраться хоть с самым малым. Все получается и с моделями и с контроллерами, но вот обнаружил одну неприятность, а именно в кешировании запросов.

Есть модель...

PHP код:
class News extends Eloquent
{
    public function 
author()
    {
        return 
$this->belongsTo('Author');
    }

Чтобы выбрать все новости я пишу...

PHP код:
$news News::remember(30)->get(); 
На этом этапе все хорошо, запрос проходит только 1 раз за 30 минут.

Но только я попытаюсь вывести ник автора новости...

PHP код:
    foreach ($news as $n)
        {
            
var_dump($n->author->username);
        } 
То независимо от того, использую я remember или нет - в логах запросов такое:

PHP код:
select from `authorswhere `authors`.`id` = '1' limit 1
select 
from `authorswhere `authors`.`id` = '1' limit 1
select 
from `authorswhere `authors`.`id` = '1' limit 1
select 
from `authorswhere `authors`.`id` = '1' limit 1
select 
from `authorswhere `authors`.`id` = '1' limit 1 
Что не так, не понимаю...

Последний раз редактировалось Cache; 25.10.2014 в 22:27.
Cache вне форума Ответить с цитированием
Непрочитано 25.10.2014, 22:31   #2
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Laravel 4 и кеширование запросов

Причина в неиспользовании активной загрузки.

$news = News::with('author')->remember(30)->get();
Code: PHP
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 25.10.2014, 22:36   #3
Пользователь

Автор темы (Топик Стартер) Re: Laravel 4 и кеширование запросов

Спасибо! От части проблему решило, но всеравно игнорирует remember и каждый раз делает запрос...

PHP код:
select from `authorswhere `authors`.`idin ('1'
Cache вне форума Ответить с цитированием
Непрочитано 25.10.2014, 22:50   #4
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Laravel 4 и кеширование запросов

remember() кеширует результат выборки, в вашем случае:

SELECT * FROM news
Code: SQL

Cвязи author в этом результате нет и не будет.

Как вариант (не всегда применимо):

$news = Cache::remember('news', 30, function() {
	return News::with('author')->get();
});
Code: PHP
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 25.10.2014, 22:59   #5
Пользователь

Автор темы (Топик Стартер) Re: Laravel 4 и кеширование запросов

Супер! Спасибо!

Цитата:
0 statements were executed
Cache вне форума Ответить с цитированием
Непрочитано 27.10.2014, 19:49   #6
Пользователь

Автор темы (Топик Стартер) Re: Laravel 4 и кеширование запросов

Оказалось этого недостаточно, так как вспомнил о том, что потребуется и разбивка по страницам. Хотелось бы выводить не больше 5 новостей на страницу.

Может подскажете, почему этот вариант не работает...

PHP код:
        $news Cache::remember('news'30, function () {
            return 
News::with('author')->paginate(5);
        }); 
Говорит...

Цитата:
Serialization of 'Closure' is not allowed
Пробовал без Cache::remember()...

PHP код:
        $news News::with('author')->remember(30)->paginate(5); 
Так работает, но все таже проблема с некешируемым запросом к авторам (3 сообщение).
Cache вне форума Ответить с цитированием
Непрочитано 27.10.2014, 20:07   #7
Аватар для PROGRAMMATOR
Администратор

По умолчанию Re: Laravel 4 и кеширование запросов

Поэтому я и написал, что не всегда применимо. Связями можно управлять через замыкание:

$news = News::with([
	'author' => function ($query) {
		$query->remember(30);
	}
])->remember(30)->paginate(5);
Code: PHP
__________________
composer require laravel/framework
yarn add vue
PROGRAMMATOR вне форума Отправить сообщение для PROGRAMMATOR с помощью ICQ Отправить сообщение для PROGRAMMATOR с помощью Skype™ Ответить с цитированием
Непрочитано 27.10.2014, 20:15   #8
Пользователь

Автор темы (Топик Стартер) Re: Laravel 4 и кеширование запросов

Как же все просто... Получается в массиве можно управлять и не одной связанной моделью.
Спасибо!
Cache вне форума Ответить с цитированием
Ответ

Метки
laravel 4, кеширование запросов


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы косающие SQL запросов Amaterasu Lineage II 67 09.08.2015 12:18
Мануал по Заливке SQL запросов через Navicat. lKingHell Архив 2 21.10.2011 18:40
[Куплю] Реализация запросов StressWeb Bupyc Рынок / Marketplace 6 08.05.2011 21:45


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 19:01. Часовой пояс GMT +3.

Вверх