Skip to main content

Laravel Eloquent ile Veritabanı Kayıtları Nasıl Güncellenir?

Laravel Eloquent ORM, veritabanı yönetimini kolaylaştıran güçlü bir araçtır. Bu rehberde, Laravel ile veritabanındaki mevcut kayıtları nasıl güncelleyebileceğinizi öğrenecek ve aynı zamanda Artisan komutlarıyla etkileşimi kullanarak linklerin açıklamasını ve listelerini nasıl değiştirebileceğinizi keşfedeceksiniz.

Bu Rehberde Ne Öğreneceksiniz?

Laravel Eloquent ORM ile veritabanındaki mevcut bir kaydın nasıl güncelleneceğini öğrenebilirsiniz. Ayrıca, Artisan komutlarıyla kullanıcıdan alınan verilerle (ask, confirm) mevcut linklerin açıklamalarını ve ilişkili olduğu listeyi nasıl güncelleyebileceğinizi öğreneceksiniz.


1. Yeni Artisan Komutunu Başlatma

Veritabanındaki linkleri düzenlemek için yeni bir Artisan komutu oluşturacağız.

Komut Dosyasını Oluşturma:

docker-compose exec app php artisan make:command LinkUpdate

Bu komut, app/Console/Commands/LinkUpdate.php dosyasını otomatik olarak oluşturur.


2. LinkUpdate Komutunun İmza ve Mantığını Yazma

Oluşturduğumuz LinkUpdate.php dosyasını açıp, güncelleme işlemini yapacak mantığı ekleyeceğiz. Bu mantık, kullanıcıdan alınan verilerle link açıklamasını ve listesini güncellemeyi içerir.

Gerekli Sınıfları Kullanıma Açma:


use App\Models\Link;
use App\Models\LinkList;

Bu satırlar, Eloquent modellerine kolayca erişim sağlar.

Komut İmzasını Tanımlama:


protected $signature = 'link:update {link_id}';

Bu satır, komutun link:update şeklinde çalışmasını zorunlu kılar ve bir link_id argümanı gerektirir.

handle() Metodunu Uygulama

Bu metod, linki bulacak, kullanıcıya sorular soracak ve değişiklikleri veritabanına kaydedecektir.


public function handle()
{
$link_id = $this->argument('link_id');
$link = Link::find($link_id);

if ($link === null) {
$this->error("Geçersiz veya bulunamayan Link ID'si.");
return 1;
}

// Kullanicidan yeni bilgileri al
$link->description = $this->ask('Link Açıklaması (Mevcut kalsın)') ?? $link->description;
$list_name = $this->ask('Link Listesi (Mevcut kalsın)') ?? $link->link_list->title;

$this->info("Yeni Açıklama: $link->description");
$this->info("Yeni Liste: " . $list_name);

if ($this->confirm('Bu bilgiler doğru mu?')) {
// Liste var mı kontrol et, yoksa oluştur
$list = LinkList::firstWhere('slug', $list_name);
if (!$list) {
$list = new LinkList();
$list->title = $list_name;
$list->slug = $list_name;
$list->save();
}

// 🔑 Linkin listesini ilişkilendir ve veritabanına kaydet
$link->link_list()->associate($list)->save();
$this->info("Güncelleme Tamamlandı.");
}

return 0;
}

Bu kod, kullanıcıdan alınan verileri veritabanına kaydeder ve linkin ilişkili olduğu listeyi günceller.


3. Güncelleme İşlemini Test Etme

Oluşturduğumuz komutu test ederek, linki başka bir listeye taşıyalım.

Mevcut Linkleri Görüntüleme

Önce veritabanındaki mevcut linkleri görelim:


docker-compose exec app php artisan link:show

Bu komut, mevcut linklerin hangi listelere ait olduğunu gösterir.

ID'si 2 olan linki rabisu_blog adlı yeni bir listeye taşıyalım.


docker-compose exec app php artisan link:update 2

Komut satırında çıkan onay sorusuna y yazıp ENTER tuşuna basarak işlemi onaylayın.


Link Açıklaması (Mevcut kalsın):
>
Link Listesi (Mevcut kalsın):
> rabisu_blog

Yeni Açıklama: Laravel Tutorial at DigitalOcean
Yeni Liste: rabisu_blog

Bu bilgiler doğru mu? (yes/no) [no]:
> y

Güncelleme Tamamlandı.

Sonucu Doğrulama

Linki tekrar kontrol ederek, ID 2'ye sahip linkin artık rabisu_blog listesine taşındığını görebilirsiniz:


docker-compose exec app php artisan link:show

Güncelleme işlemi başarılı oldu ve linkin yeni listesi görünüyor.


Sıkça Sorulan Sorular (SSS)

  1. Laravel Eloquent ile veritabanı kayıtlarını nasıl güncelleyebilirim?

Laravel Eloquent ile kayıtları güncellemek için update() metodunu kullanabilirsiniz. Eğer model üzerinden işlem yapıyorsanız, $model->save() ile de kaydınızı güncelleyebilirsiniz.

  1. ask() metodu ne işe yarar?

Bu metod, komut satırında kullanıcıdan veri almak için kullanılır. Kullanıcıya bir soru sorar ve cevap olarak girilen değeri döner.

  1. associate() metodu ne işe yarar?

associate() metodu, Laravel ilişkileri (relations) yönetmek için kullanılır. Bir modelin ait olduğu üst modelin ilişkisel anahtarını (örneğin link_list_id) doğru ID ile güncelleyerek ilişkisel bağlantıyı kurar.

  1. this->confirm() ne işe yarar?

Bu metod, kullanıcının bir işlemi onaylamasını sağlamak için kullanılır. Silme ve güncelleme gibi geri dönüşü olmayan işlemler için güvenlik katmanı oluşturur.

  1. LinkList::firstWhere('slug', $list_name) ne işe yarar?

Bu ifade, LinkList modelinde slug değeri $list_name olan ilk kaydı bulur ve bu kaydı ilişkilendirme için kullanır.


Sonuç

Bu rehberde, Laravel Eloquent ORM ile veritabanındaki mevcut bir kaydı nasıl güncelleyebileceğinizi ve Artisan komutları ile kullanıcı etkileşimi kullanarak linklerinizi nasıl düzenleyebileceğinizi öğrendiniz. Hemen Rabisu Bulut platformunda Laravel uygulamanızı test edin ve canlıya alın!