Может войдёшь?
Черновики Написать статью Профиль

«Eloquent»

Eloquent и Blade: советы по повышению производительности

перевод Eloquent blade

Одна из самых распространенных проблем с производительностью, которую я видел в Laravel - это использование методов Eloquent и отношений из шаблонов Blade, создание ненужных дополнительных циклов и запросов. В этой статье я покажу различные сценарии и способы их эффективного использования.

Сценарий 1. Загрузка отношения belongsTo(): не забудьте про «жадную загрузку»

Типичный случай — вы перебираете записи через @foreach, и, в каком-то столбце, вам нужно показать родительскую запись с определенным полем.

@foreach ($sessions as $session)
<tr>
  <td>{{ $session->created_at }}</td>
  <td>{{ $session->user->name }}</td>
</tr>
@endforeach

И, конечно, Session принадлежит User, в app/Session.php :

public function user()
{
    return $this->belongsTo(User::class)…
artoodetoo

ИМХО, совершенно недопустимо изменять данные в Представлении. У кого-то может возникнуть такой соблазн, типа, для "оптимизации". Счётчик какой-нибудь посчитать и сохранить. Но не надо так делать! Потому что это портит логику и усложняет сопровождение.

Что же до "обращения к базе" в смысле операций чтения, в идеале да, они должны все происходить до обращения к Представлению. Но мы же сами добиваемся абстракции, когда чтение свойства объекта может неявно сопровождаться каким-то действием. Представление понятия не имеет делали мы eager loading или нет. Оно просто использует объект. Короче, врядли удастся избежать select в 100% случаев. По причине именно "объектности", "принципа чёрного ящика". Мы не всегда знаем как что-то работает внутри. Мы знаем только внешний эффект.

Недавно автор статьи Povilas опубликовал свой приём по внедрению данных в шаблон: через инъекцию сервиса (@inject), который рендерит свою вьюху и возвращает её как текст для вставки. Внутри такого сервиса очевидно будут операции с базой и как по мне это не очень страшно, если они не изменяют состояние.

Calculations in Blade, without violating MVC? Use Service Injection

Событийная модель Laravel: эвенты в Eloquent и всей системы в целом

Event Observer События Eloquent Laravel 4.x

Сразу хочу предупредить, что весь материал есть в документациях под тем или иным соусом. Я же постарался скомпоновать всю информацию по событиям в одном месте.

Вообще, что такое событие в программировании? И вот что говорит википедия:

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

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

В базах данных существует такое понятие как триггер. Т.е. некая хранимая процедура вызываемая при наступлении определенных событий. Например, добавление, удаление…

skv

Крутая статья, большое спасибо!!!

Аффтар ацкей сотона пешы ищщо )))

← Назад | Дальше → Движется на Habravel