Modele her kayıt eklendiğinde, 'order' sütunun en yüksek değer olmasını istiyorsanız Model Observer ile bunu gerçekleştirebilirsiniz.
php artisan make:observer PageObserver
Bu komut bize Observer sınıfımızı oluşturacak.
app/Observers/PageObserver.php;
<?php
namespace App\Observers;
use App\Models\Page;
class PageObserver
{
/**
* Handle the page "creating" event.
*
* @param \App\Models\Page $page
* @return void
*/
public function creating(Page $page)
{
$page->order = Page::max('order') + 1;
}
}
Son olarak bu Observer 'ımızı kayıt edeceğiz.
app/Providers/EventServiceProvider.php;
<?php
namespace App\Providers;
use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;
use App\Observers\PageObserver;
use App\Models\Page;
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
Page::observe(PageObserver::class);
}
}
Creating eventinde bu şekilde halledebilirsiniz. Updating/Updated eventlerinde işlem yapacaksanız dikkatli olmalısınız. Aksi halde sonsuz döngüye sokabilirsiniz.