Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#2 Re: Laravel 5.x » Какой подход более правильный при проектировании БД » 05.01.2019 01:58:01

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

#3 Re: Laravel 5.x » Работа с кешем » 27.04.2018 14:27:49

А зачем все статьи из базы кешировать?

Сам до конца не понял. Поставлена такая задача по ТЗ, значит надо решить.
Получается единственный выход это каждый раз при добавления/обновления/удаления придется через Cache::forget(), чистить все записи из кэша !? Другого способа нет?
Была конечно идея каждую отдельную кешировать через Cache::put('article-'.$this->id); а потом сравнивать бд и кеш и при не соответствии подтягивать изменённую статью или удалять при отсутствии, но как по мне это полный аншлаг. Куча ненужных записей и if внутри foreach который только увеличит время обработки что в корне убивает смысл использования Cache.
Может у кого есть ещё идеи по реализации !
P.S на счёт кеширования всех записей -> я так понимаю что это надо не только для front, и задача такая по тому что заказчик хочет чтобы в админке так же все записи были закешированы .

#4 Laravel 5.x » Работа с кешем » 27.04.2018 01:25:09

MeKree
Ответов: 4

Доброго времени суток. Не могу до конца понять как работает Кэш в ларе.
Значит ситуация такая. Допустим есть модель Articles.

class Article {

    public function getArticles() {

        $articles = Cache::remember('articles', 24*60, function () {

            return Article::with('lang')->get();

        });

        return $articles;

    }

} 

Как при удалении какой то существующей статьи, удалить ее из кэша в том числе ? Или как при добавлении новой статьи так же добавить ее в уже существующий кеш ?
На сколько я понял из документации метод remember должен автоматически чистить/добавлять записи в указанный кеш. Правильно ли я понял ? По тому что если да то почему-то на Laravel 5.4 работает это не совсем как ожидается. При добавлении/удалении записи она удаляется из бд но остается в кеше, а ведь я показываю то что в кеше. При таком раскладе получается что при использование CRUD-a мне надо в начале всех методов (store, update, destroy), вбивать Cache::forget('articles'), то бишь удалять все записи из кэша что бы потом закешировать актуальные данные из бд. Все это не было бы так принципиально, да вот что делать если у меня будут 5000 записей в бд ? Получается если я добавлю/удалю какую-то статью у меня произойдет запрос на 5000 записей. Как можно этого избежать или какие альтернативы можно использовать/применить? Заранее спасибо за предоставленную помощь !!!

P.S используемый драйвер - file

#5 Laravel 5.x » Вопрос по ORM » 08.02.2018 03:14:09

MeKree
Ответов: 1

Есть таблица в бд и я знаю что там 5 колонок (пр. name, surname, dob, created_at, updated_at).

А если я изначально не знаю сколько там колонок и их имя как узнать количество (count) колонок и их название.
Заранее спасибо!

UPD1: По идее конструкция дожна выглядеть примерно так

foreach ($items as $item) {
   
   $number = count($item->attributes());
   foreach($item->attributes() as $key => $value) {

       echo $key.' = '.$value;
   }

} 

данная конструкция конечно же не работает, как ее довести до ума !?

#6 Laravel 5.x » Ключи коллекции » 28.12.2017 03:26:27

MeKree
Ответов: 1

Есть коллекция 0 => 'somedata', 1 => 'somedata2' .....

Как в этой коллекции заменить все ключи (т.е 0,1,2,3...) на 'name', что бы в итоге получилось name => 'somedata', name => 'somedata2'.....
смысл всего этого в том что бы после такой манипуляции можно было использовать $data->where('name','=','somedata*')
Спасибо заранее!

#8 Laravel 5.x » Правильный селект » 09.12.2017 19:32:00

MeKree
Ответов: 2

Есть таблица Offers с полями price и points.
Предположим есть 10 offers нужно из них посчитать по нарастанию первые 3 у которых наименьшая цена и наибольшее количество очков.
Подскажите как это можно сделать. Спасибо заранее !

#9 Re: Laravel 5.x » Работа с датой » 08.12.2017 14:34:04

Спасибо большое за ответ, в принципе до того как вы ответили я использовал именно такой способ который вы описали в предыдущем сообщении.
Ещё раз благодарю за участие!

#10 Re: Laravel 5.x » Работа с датой » 07.12.2017 21:46:01

Является ли описанный вами метод самым правильным или есть и другой способ ??? Спасибо!

#11 Laravel 5.x » Работа с датой » 07.12.2017 19:00:51

MeKree
Ответов: 6

Доброго времени суток.
Есть таблица articles (id, name,...,status,timestamps)

Задача состоит в том что бы через определенное количество времени после того как article опубликован (скажем 2 часа), скрыть его, то есть сменить status.
Как такое можно реализовать на laravel? Заранее спасибо !!!

#13 Re: Хорошие практики (FAQ) » Контроллеры » 11.11.2017 15:44:40

Не хватает деталей

каких именно деталей не хватает ? я дополню !

#14 Re: Хорошие практики (FAQ) » Контроллеры » 11.11.2017 15:11:06

А какие причины то?
Что можно сказать, не зная конкретики?

Ну к примеру есть несколько контроллеров с одинаковой сущностью. По типу новости - блог. На данный момент не вижу смысла держать несколько контроллеров с почти одинаковым кодом. Если все же взглянуть на обратную сторону монеты, то при изменение одной из сущностный от других, нужно будет либо заполнять контроллер if-ами либо отделять в отдельный контроллер.
Вообще какие best practices есть на этот счет ?))

#15 Хорошие практики (FAQ) » Контроллеры » 11.11.2017 15:01:38

MeKree
Ответов: 6

Привет всем, пришла мне идея в одном проекте соединить несколько контроллеров в один. Хотелось бы послушать ваше мнение на этот счет. На сколько это хорошая практика, и стоит ли вообще. Проект маленкий к среднему. Буду рад любому мнению!

#17 Re: Laravel 5.x » роли юзера в layout.blade.php » 02.09.2017 22:49:37

В web.php

Route::resource('photos', 'PhotoController');

Ресорс контроллер изначально поставляется с базовыми методами (index, create, store, show, edit, update, destroy)

Дописываешь

public function __construct()
{
      $this->middleware('checkRole'); //тут название твоего посредника
}

если все же хочешь определить данного посредника для группы роутов то так:

Route::group(['middleware' => 'checkRole'], function()
{
    Route::resource('photos', 'PhotoController');
});

#18 Re: Laravel 5.x » роли юзера в layout.blade.php » 01.09.2017 15:43:08

не будет ли это логичнее сделать в группе роутов?

А если к примеру потом надо будет эти данные приделовать и ко второй, третей группе роутов? Будете дублировать код ?

Тут по сути все просто прописали ресоурс роут и в конструкте контроллера указали посредника )

#19 Re: Laravel 5.x » роли юзера в layout.blade.php » 01.09.2017 01:31:36

а как тут данные то прицепить?????

public function handle($request, Closure $next)
    {
        View::share('isadmin', User::isAdmin());
        View::share('isclient', User::isClient());
        View::share('ismaster', User::isMaster());

//ну или если хочешь сохранить пару строк то так

        View::share(['isadmin' => User::isAdmin(), 'isclient' => User::isClient(), 'ismaster' => User::isMaster]);
 
        return $next($request);
    }

В любом из этих двух вариантов isadmin, isclient, ismaster можно будет использовать как переменные во вьюхе.

Только не забудь use View прописать в посреднике и в конструкте контроллера этого самого посредника!

#20 Laravel 5.x » Удаление связанных таблиц » 31.08.2017 20:04:30

MeKree
Ответов: 1

Представьте таблице.
Regions ->hasMany (departments)
Departments ->hasmany(Langs)
Как при удаление экземпляра Region удалить все department_langs если foreign key не могу использовать т.к исползываются полиморфные связи.
Пытался так

$region = Region::find($id);

foreach($region->departments as $department)
{
$department->langs->delete();
}

$region->department->delete();
$region->delete();

Получаю -> method delete not found на строке где $department->langs->delete();

Как быть!? Спасибо заранее!

#21 Re: Laravel 5.x » роли юзера в layout.blade.php » 31.08.2017 17:07:56

например для целой группы роутов выполнять функцию получения роли, как это будет выглядеть?

Во вьюхе этого делать не стоит.

Или ничего страшного, если роль дергается прямо из вьюхи?

Для таких целей все же лучше всего использовать Middleware

#22 Re: Laravel 5.x » Вопрос про отношения » 31.08.2017 13:15:35

добавьте поле типа таблицы в таблицу с переводами, а в основную модель метод который возвращает по ид и этому полю-типу строки

Я так понимаю вы сейчас говорите про полиморфные связи.

#23 Re: Laravel 5.x » Вопрос про отношения » 31.08.2017 13:09:44

Достаточно, спасибо за внятное объяснение smile

#24 Re: Laravel 5.x » Вопрос про отношения » 31.08.2017 13:00:16

Хорошо, а если предположим я собираюсь сделать таблицу в которой хранятся меню. Где parent_id это id записи в этой же таблице. Тогда как быть ?

Подвал раздела