Laravel v9.18.0 Telah Rilis

Published on 24 June

Dalam artikel ini kita akan membahas apa-apa saja yang terbaru dalam rilis kali ini. Oia, semua perbaruan ini dikontribusi oleh tim inti dari laravel yaitu Tim MacDonald.


Monitoring Query

Dengan adanya metode baru ini, kita bisa dapat dimudahkan melakukan sesuatu jika query yang kita load telah melebihi waktu yang kita tentukan. Jadi Anda bisa langsung memasukkan fungsi itu didalam file app/Providers/AppServiceProvider.php seperti berikut:

namespace App\Providers;
use Illuminate\Database\Connection;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    ...
    public function boot()
    {
        DB::whenQueryingForLongerThan(500, function (Connection $connection) {
            // Beritahu developer tentang hal ini
        });
    }
}

Nested Eager Loading

Dulunya, sebelum adanya fitur ini, kita akan mengulang-ulang dari satu relasi ke tabel relasi lain.

Bayangkan, disini kita akan menampilkan tabel documents yang isinya pasti ada authornya, tetapi author itu juga punya dua relasi ke tabel lain yang mesti kita tampilkan juga.

Maka sebelumnya kita akan menggunakan seperti ini:

Document::query()
    ->with(['user.articles', 'user.address'])
    ->get();

Nah, dengan adanya fitur ini, kita bisa nest dia dengan cara:

Document::query()
    ->with([ 'user' => ['articles', 'address']])
    ->get();

Menggunakan Rule Objects

Dalam fitur ini, kita jauh lebih mudah untuk mendefinisikan custom validasi. Nantinya, setelah kita generasi file nya dari command line, maka dia akan otomatis membuat file tersebut didalam folder app/Rules:

php artisan make:rule Lowercase --invokable

Setelah itu, maka Anda akan melihat file tersebut hanya dengan satu metode saja yaitu __invoke seperti:

<?php

namespace App\Rules;
use Illuminate\Contracts\Validation\InvokableRule;

class Lowercase implements InvokableRule
{
    /**
     * Run the validation rule.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @param  \Closure(string): \Illuminate\Translation\PotentiallyTranslatedString  $fail
     * @return void
     */
    public function __invoke($attribute, $value, $fail)
    {
        if (strtolower($value) !== $value) {
            $fail('The :attribute must be lowercase.');
        }
    }
}

Semoga informasi terbaru ini berguna ya teman-teman.