Giriş yapmadınız.

#1 28.01.2019 10:02:07

caner_dmn
Üye
Kayıtlı: 23.05.2018
Mesajlar: 60

Model default value

Merhaba arkadaşlar model içinde bir sütün için default değer atamak istiyorum. Bunun için

protected $attributes = [
        'key' => 'value'
    ];

şeklinde kullanılabilir diye dökümanlar da buldum ancak benim buradaki value yerine Sessiondan bir değer girmem gerekiyor. Ancak

protected $attributes = [
        'key' => Session::get('default_deger')
    ];

şeklinde kullanınca php strom da direk kırmızıyla çizerek hata veriyor. Bunu nasıl çözebilirim ?

Çevrimdışı

#2 28.01.2019 10:06:24

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 417

Yanıt: Model default value

protected $attributes = [
        'key' => session('default_deger')
    ];

bunu denedin mi?


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#3 28.01.2019 10:31:50

caner_dmn
Üye
Kayıtlı: 23.05.2018
Mesajlar: 60

Yanıt: Model default value

deathisonitsway yazdı:

protected $attributes = [
        'key' => session('default_deger')
    ];

bunu denedin mi?

evet bunu denedim. Bu şekilde hata veriyor.

Çevrimdışı

#4 28.01.2019 10:32:42

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,589
Website

Yanıt: Model default value

Ne yazık ki bu şekilde bir kullanım PHP'de mümkün değil.

Onun yerinde Model::creating() ile yapabilirsiniz.

Çevrimdışı

#5 28.01.2019 10:36:36

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 417

Yanıt: Model default value

şimdi yeni farkettim; sınıf propertylerinde değişken bu şekliyle kullanılmaz.Bunu methoda __set __get yaparak elde edebilirsin.
Laravelde mutatorlar var

https://laravel.com/docs/5.7/eloquent-m … -a-mutator

vasıtasıyla yapabilirsiniz diye düşünüyorum.

Son düzenleyen deathisonitsway (28.01.2019 10:37:01)


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#6 28.01.2019 10:54:04

caner_dmn
Üye
Kayıtlı: 23.05.2018
Mesajlar: 60

Yanıt: Model default value

deathisonitsway yazdı:

şimdi yeni farkettim; sınıf propertylerinde değişken bu şekliyle kullanılmaz.Bunu methoda __set __get yaparak elde edebilirsin.
Laravelde mutatorlar var

https://laravel.com/docs/5.7/eloquent-m … -a-mutator

vasıtasıyla yapabilirsiniz diye düşünüyorum.

Malesef hocam bu şekilde de olmuyor. Bunun çalışması için o sütüna ait bir değer gönderilmesi gerekiyor. Bunu göndereceksem gerçek değerini göndermem daha mantıklı olur diye düşünüyorum.

Çözüm olarak @mgsmus hocamızın dediği seçeneği uygulamak kalıyor.

Çevrimdışı

#7 28.01.2019 17:09:15

caner_dmn
Üye
Kayıtlı: 23.05.2018
Mesajlar: 60

Yanıt: Model default value

@deathisonitsway , mgsmus

Çözüm olarak şu şekilde bir kod ile sorunumu çözdüm :

    public function __construct(array $attributes = array())
    {
        $this->setRawAttributes(array(
            "key" => Session::get('value')
        ), true);
        parent::__construct($attributes);
    }

buradaki kodu pek anlamasam da olan attributeslere ekleme yapıyor sanırım.

#############################################################

Sonrasında farkettim ki bu veri çekerken de sütünün değerini değiştiriyor. Burada işlemi sadece insert ile yaparken diye belirtebilrmiyiz acaba big_smile

Son düzenleyen caner_dmn (28.01.2019 17:16:23)

Çevrimdışı

#8 28.01.2019 17:23:55

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,589
Website

Yanıt: Model default value

Benim önerdiğim yol:

public static function boot()
{
    parent::boot();

    static::creating(function($model) {
        $model->key = session('value')
    });
}

çünkü;

1. setRawAttributes ile eklenen özelliklerde accessor ve mutator gibi özellikleri kullanamazsınız. Şu an ihtiyacınız olmayabilir belki ama ileride ihtiyacınız olabilir.

2. İstediğiniz işlemin ait olduğu yer modelin yüklendiği an değil. Siz bu veriye kayıt eklerken ihtiyaç duyuyorsunuz; sizin algoritmanızın bir parçası, framework'ün değil.

Çevrimdışı

Forum alt kısmı