Croizer Kaldi ki türkçe dil desteğide yok çeviri eklentisini kullanıyorum dökümanlara bakarken.
Bu işi öğrenmenin yolu İngilizce'den geçiyor. Başka bir açıklama yapma gereği hissetmiyorum.
Soruya gelince. İstediğinizi yapmanın birçok yolu var. Öncelikle Admin ve Account modeli arasında ilişki olduğu için bu ilişkiyi ayarlayalım. Account modeli admin_id alanı (foreign key) ile Admin modeline bağlı. Açıklamanıza göre Admin'in bir Account'u var (Sizin yapınıza göre birden fazla Account da olabilir ama açıklamaya bağlı kalacağım). Bu ilişkiye one-to-one (bire bir) diyoruz. İlişki Admin → Account yönünde kurulursa HasOne; Account → Admin yönünde kurulursa BelongsTo diyoruz.
Cümleleri İngilizce'ye çevirirsek:
Admin → Account | Admin'in bir Account'u var. Admin has one Account.
Account → Admin | Account bir Admin'e ait. Account belongs to an Admin.
Bu ilişkiyi şu şekilde kuruyoruz:
Admin modeline şunu ekleyin:
public function account(): HasOne
{
return $this->hasOne(Account::class);
}
Account modeline şunu ekleyin:
public function admin(): BelongsTo
{
return $this->belongsTo(Admin::class);
}
Şimdi sizin senaryoya göre önce manuel olarak bir Admin oluşturup bir de ona bağlı bir Account oluşturalım:
$admin = Admin::create();
// Üstte oluşan Admin::$id, Account::$admin_id alanına otomatik işlenecek
$account = $admin->account()->create();
Şimdi bu işlemi otomatikleştirelim. Bunu yapmanın birden fazla yolu var ama ben size şimdilik en kolayını yazacağım çünkü dokümantasyonu buraya tekrar yazmak istemiyorum.
Admin modeline şunu ekliyorsunuz:
public static function boot()
{
// Model::boot() yöntemini ezdiğimiz için önce diğer olayların (event) ateşlenmesini sağlıyoruz.
parent::boot();
// Sonra created (oluşturuldu) olayını yakalayıp işlem yapıyoruz. created olayı model oluştuktan
// sonra ateşlenir. O yüzden created (create + ed takısı) şeklinde geçmiş zaman (simple past tense)
// kullanılmış. created içerisine verdiğimiz anonim geriçağrım fonksiyon (callback denir)
// içerisindeki $admin parametresi ise oluşturulan Admin modelinin örneğidir (instance denir).
static::created(function($admin) {
$admin->account()->create();
});
}
Kullanabileceğiniz tüm olaylar ise retrieved, creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored. Bunları Türkçe'ye çevirirseniz ne olduklarını anlarsınız. Kısaca geçmek gerekirse, ing takısı alanlar bahsi geçen eylemden önce; ed takısı alanlar ise bahsi geçen eylemden sonra olacak demek. ing takısı alanlarda model henüz oluşmamıştır (yani ortada bir kayıt ve dolayısıyla oluşmuş bir id yok) fakat oluşması için doldurulan alanlara ulaşabilirsiniz.
Diğer yollardan bazıları ise:
Event/Listener kullanarak:
https://laravel.com/docs/5.8/events
Observer kullanarak:
https://laravel.com/docs/5.8/eloquent#observers
Event Subscriber kullanarak
https://laravel.com/docs/5.8/events#event-subscribers
$events->listen(
'eloquent.created: App\Admin',
'App\Listeners\AdminEventSubscriber@onCreated'
);
Global Event::listen kullanarak:
app/Providers/EventServiceProvider.php:
public function boot()
{
parent::boot();
Event::listen('eloquent.created: App\Admin', function ($admin) {
$admin->account()->create();
});
}
Başka yollar da düşünülebilir...