lee-to / laravel-seo-by-url

Seo manager for Laravel 9+
https://cutcode.dev
MIT License
15 stars 2 forks source link

Вопрос: можно ли автоматизировать заполнение сер свойств? #2

Closed DifficultPhil closed 1 year ago

DifficultPhil commented 1 year ago

Доброго дня! У меня есть сеть сайт на Laravel, есть новости, Я бы хотел автоматически проставить метатеги для существующих новостей , их более 1000, можно ли это сделать с помощью вашего компонента?

lee-to commented 1 year ago

При заходе на страницу со статьей вызывайте seo()->title('Мета тег') и он будет выводится либо добавьте seo()->title('Мета тег', true) и также сохранится в базе и закешируется

DifficultPhil commented 1 year ago

я сделал реализацию проверки, есть установлено ли сео путем

  if (seo()->meta()->title() != null) {
                seo()->title( 'title', true);
                seo()->description('desc', true);
                seo()->keywords('keywords', true);
            } else {
                seo()->meta()->title();
                seo()->meta()->description();
                seo()->meta()->keywords();
            }

и получаю много запросов от модуля, не подскажите в чем ошибка? Мне кажется тут достаточно 1 select, 1 inser, 1update

пример при отсутсвии сео

select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
insert into `seo` (`url`, `title`, `updated_at`, `created_at`) values ('/item/item555', 'dfdsgsdgsdg', '2023-05-26 09:26:57', '2023-05-26 09:26:57')
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
update `seo` set `description` = 'vgfgfdgfg', `seo`.`updated_at` = '2023-05-26 09:26:58' where `id` = 10
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
update `seo` set `keywords` = '5465456445454', `seo`.`updated_at` = '2023-05-26 09:26:59' where `id` = 10
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1
lee-to commented 1 year ago

я сделал реализацию проверки, есть установлено ли сео путем

  if (seo()->meta()->title() != null) {
                seo()->title( 'title', true);
                seo()->description('desc', true);
                seo()->keywords('keywords', true);
            } else {
                seo()->meta()->title();
                seo()->meta()->description();
                seo()->meta()->keywords();
            }

и получаю много запросов от модуля, не подскажите в чем ошибка? Мне кажется тут достаточно 1 select, 1 inser, 1update

пример при отсутсвии сео

select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
insert into `seo` (`url`, `title`, `updated_at`, `created_at`) values ('/item/item555', 'dfdsgsdgsdg', '2023-05-26 09:26:57', '2023-05-26 09:26:57')
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
update `seo` set `description` = 'vgfgfdgfg', `seo`.`updated_at` = '2023-05-26 09:26:58' where `id` = 10
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where (`url` = '/item/item555') limit 1
update `seo` set `keywords` = '5465456445454', `seo`.`updated_at` = '2023-05-26 09:26:59' where `id` = 10
select * from `seo` where `url` = '/item/item555' limit 1
select * from `seo` where `url` = '/item/item555' limit 1

Оптимизировал в апдейте 0.10.2 но вы все равно должны понимать что когда сохраняете параметр то под капотом вызывается updateOrCreate который в себя включает два запроса - select и update/insert и после update/insert кеш будет сброшен и последует запрос на данные

После фикса количество запросов сократится но они происходят только в момент сохранения, сам процесс сохранения у вас не должен быть на каждый запрос, вы должны сохранять только в случае когда мета еще не задана или ее надо изменить