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.