Laravel Soft Deletes

İsmail Hakkı YILDIZ 14:30 Yorum ekle
Merhabalar,
SoftDeletes dediğimiz olay veritabanımızdan bilgileri silmek istediğimizi düşünelim. fakat bi saniye bunların silinmemesi lazım.
o zaman silmeden önce ya yedek almamız lazım yada silmek için silinmismi* diye sütun açıp her sorgumuzda onuda kontrol etmemiz lazım.

Tamda böyle durumlar için laravel bize bir seçenek sunuyor. SoftDeletes.

Bu özelliği  kullanabilmeniz için en hızlı yöntem migrate yaptığınız dosyanıza aşağıdaki gibi tanımlama yapmanız.

Örn. :
//öncelikle migration dosyamızı kontrol edelim.
 public function up()
    {

        Schema::create('ornekdb', function (Blueprint $table) {
            $table->softDeletes();
            $table->increments('s_id');
            $table->string('s_kod',15);
            $table->string('s_adi',50);
            $table->string('s_soyadi',50);
            $table->string('s_telefon',13);
            $table->text('s_adres',500);
            $table->string('s_durum',15);
            $table->string('s_odemesekli',11);
            $table->longText('s_icerik');
            $table->timestamps();
        });
    }
Seçili olan satırdaki tanımlamayı yapıyoruz.
daha sonra;
aynı şekilde model dosyamızada bir tanımlama yapmamız gerekmekte. bu tanımlamayıda aşağıdaki gibi yapmamız gerekiyor.

//öncelikle migration dosyamızı kontrol edelim.
namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class ornekdb extends Model
{
    protected $primaryKey = "s_id";
    use SoftDeletes;
    protected $dates = ['deleted_at'];

    //
}
Yukardaki şekilde tanımlama yaptıktan sonra. artık delete() methodu ile sildiğimiz kayıtlar silinmeyecek, ama select ile seçtiklerimiz arasında da görünmeyecektir.
<br />
Burda önemli bir konu mevcut.
peki elimizde zaten hazır bir sistem var buna nasıl entegre edeceğiz ?

burda da öncelikle migrate oluşturmamız lazım.
proje anadizinine gelip aşağıdaki komutu çalıştırıyoruz.
//softupdatemigrate.
php artisan make:migration softupdatemigrate
size yeni bir migration dosyası oluşturacaktır.
içerisine aşağıdaki şekilde kod yazabilirsiniz.
class softupdatemigrate extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('softdeleteeklenecektabloadi',function (Blueprint $table){
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {

        Schema::table('softdeleteeklenecektabloadi',function (Blueprint $table){
            $table->dropColumn('deleted_at');
        });
    }
}

yukarıdaki dosyayı migrate ettiğinizde artık tablonuz SoftDeletesi destekliyor olacaktır.
Konuyu burda kapatmak istemiyorum. Çünkü en önemli sorunlardan biri baş gösterecek :D Sildiklerimizi nasıl görüntüleriz. nasıl geri getiririz. onlar için de aşağıdaki gibi komutlarla işlemlerimizi yapabiliriz.
 //Örnek Kodlar
 ModelAdi::withTrashed()->get(); //Silinmiş olanlarla beraber hepsini getirir.
 ModelAdi::onlyTrashed()->get(); //sadece silinmiş kayıtları getirir.
 ModelAdi::withTrashed()->find(*id*)->restore(); // *id* kısmında belirtilen idli veriyi geri getirir.
 ModelAdi::find(*id*)->forceDelete(); //*id* li veriyi tamamen siler birdaha geri getirilemez.
 //Bitiş

Laravel 5.7 Rules

İsmail Hakkı YILDIZ 09:57 Yorum ekle
Merhaba blog okuyucusu, bugün sizlerle laravelin 5.7 versiyonunda kendi kuralımızı oluşturmaya çalışacağız.

İş : Geliştiriyor olduğum bir projede Aktif dönem(YIL) dışında başka bir döneme kayıt yapılmamasını istemekteyim. Bununla beraber mevcut sistemde işime yarayacak bir kod bulamadım. belki de vardı fakat ben aramakla uğraşmak istemedim. en kolayı yeni birşey öğrenmek amacıyla kural yazmak olduğunu varsayıp işe koyuldum. bunun için aktif dönemi veritabanında tutup db yi yormaktansa her yerden erişebileceğim .env dosyasına DONEM=2019 satırını ekledim.

Laravel in resmi sitesindeki dökümantosyana bakarak yeni bir kural oluşturmak amacıyla terminal ekranıma aşağıdaki kodu yazdım.

php artisan make:rule AktifDonemRule

Herhangi bir hata almadan rol olmuşsa hemen App\Rules\AktifDonemRule.php dosyasına ulaşıp dosyayı açıyoruz.

içerisinde passes ve messages adında hazır 2 fonksiyon bulunmakta.

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class AktifDonemRule implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $value = date('Y',strtotime($value));
        return ($value == env('DONEM')) ? true : false;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return 'Lütfen içinde bulunduğumuz yıla kayıt yapınız. ';
    }

olarak içeriğini düzeltiyoruz.

kuralımız hazır. şimdi kuralı kullanacak olan kontrollerimize gidip aşağıdaki gibi değişiklikler yapıyoruz.

//öncelikle kontroller dosyamızın en üstüne aşağıdaki satırı ekleyelim.
use App\Rules\AktifDonemRule;
//Daha sonra aynı dosyadaki fonksiyonumuzan gönderelim.
 public function cariBankaBakiyeEkle(Request $request)
    {
        $kontrol = Validator::make($request->all(),[
            'c_refid'=>'integer|exists:carilers,cari_id',
            'c_aciklama'=>'string|min:5|max:191',
            'c_banka'=>'integer|exists:bankahesaplars,hesap_id',
            'c_tarih'=>'date|date_format:Y-m-d',
            'c_tarih'=>[new AktifDonemRule(date('Y'))],
            'c_tutar'=>'required|numeric|min:1|max:99999999',
            'c_islem'=>'required|in:borc,alacak',
        ]);

11. satırda kullanımını görebilirsiniz,

Ve Sonuç.

İLK POST

İsmail Hakkı YILDIZ 21:17 Yorum ekle
Bu Konu İlk Yazı




 Her blogger gibi sizinle birşeyler paylaşma amacıyla bu bloğu kuruyorum. o yüzden lafı uzatmadan.
echo "hello World";