Poznajemy złe praktyki Laravela (kilka prostych) + dowiadujemy się, skąd czerpać wiedzę i ciekawe kody Laravelowe. Do dzieła.

Ok, materiał pochodzi ze strony Laravel Daily. Pierwszy przykład:

use App\Models\Book;
 
$books = Book::all();
 
foreach ($books as $book) {
    echo $book->author->name;
}

Co my tu mamy? Lazy loading, czyli liczba queries to 1 (dla wszystkich książek) + liczba książek w bazie danych (dla zaciągnięcia każdej relacji każdej książki).

Tak zwany N+1 problem. Jakie rozwiązanie proponują? Eager loading (już to robiliśmy) bądź preventLazyLoading (tego nie mieliśmy).

Według dokumentacji Laravela tak robimy preventLazyLoading (w AppServiceProvider):

use Illuminate\Database\Eloquent\Model;
 
/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Ok, następny przykład:

$posts = Post::with('comments')->get();
 
foreach ($posts as $post) {
    echo $post->title . ': ' . $post->comments()->count();
}

Tutaj ich zdaniem ładujemy więcej, niż potrzebujemy, nie sposób się nie zgodzić. Jedno z rozwiązań:

$posts = Post::withCount('comments')->get();
 
foreach ($posts as $post) {
    echo $post->title . ': ' . $post->comments_count;
}

To powinniśmy już znać, ale proponują też coś, co robiliśmy w Symfony, ale w Laravelu jeszcze nie:

$posts = Post::select('title')
    ->withCount('comments')
    ->get();
 
foreach ($posts as $post) {
    echo $post->title . ': ' . $post->comments_count;
}

Select pozwala nam wybrać konkretne kolumny. W fasadzie DB to robiliśmy, ale szczerze nie wiedziałem sam, że model też to posiada.

Ok, następny przykład, tym razem Blade:

{{ $project->user->name }}

Tutaj zwracają uwagę, że możemy próbować wyświetlać coś, co jest nullem i podają takie rozwiązanie:

{{ $project->user?->name }}

Twierdzą, że to częsty przypadek i podają taki kod:

$adminEmail = User::where('is_admin', 1)->first()->email;

Tu też nikt nam nie gwarantuje, że first będzie istnieć.

Reszta praktyk ukryta za paywallem, mają sporo artykułów częściowo bądź całkowicie ukrytych za paywallem, ale mają też darmowe i ciekawe, które warto obserwować.

Skąd jeszcze czerpać wiedzę? Cóż:

  • Laracasts
  • Kanał Laravel na Youtube
  • Oficjalna dokumentacja Laravela

Tak, tego nie da się podkreślić zbyt mocno – randomowe przeglądanie dokumentacji (także samych języków programowania) i upewnianie się, że jesteśmy na czasie oraz wszystko rozumiemy to powinna być rutyna.

A skąd brać informacje o JavaScript i frontendzie? Polecam:

  • 30 seconds of code (już polecałem w lekcjach o JS, CSS też tam jest)
  • CSS tricks (typowo o CSS)
  • MDN (html, css, js)
  • Tailwind CSS (paleta kolorów)
  • Dokumentacja Ionic (generator kolorów i zmiennych CSS)
  • Kanały na Youtube (jest ich sporo)

A coś o Symfony? Zbyt długo w nim nie siedzę, ale mogę polecić:

  • SymfonyCasts
  • Dokumentacja Symfony

Wiedzę trzeba non-stop poszerzać, najlepiej o dobre wzorce i praktyki, to już powinna być dla nas rutyna.