• 02-04-2020, 20:54:03
    #1
    Merhabalar.Laravelded kullanıcı kayıtında aynı isimle kayıt olunmamasını istiyorum.Fakat bu kodları yazdığımda eğer o kullanıcı adında 2 tane kişi kayıtlıysa hata mesajını döndürüyor fakat tek kişi o isimle kayıtlıysa direkt kayıt ediyor.neden olabilir acaba ?
    $admin_user=admin_kayit_model::all();    $sayac=1;    foreach ( $admin_user as $item) {       if($item->username==$request->username)       {       }       else{                 }    }    if($sayac>=1)    {        return "hata";    }else    {        $password = $request->password;        $password_2 = Hash::make($password);        admin_kayit_model::create(['username' => $request->username,'password' => $password_2]);    }
    Mantığını galiba kuramadım.Yardımcı olabilir misiniz?
  • 04-04-2020, 13:28:17
    #2
    <?php
    
    $admin_users = admin_kayit_model::all();
    
    foreach ($admin_users as $admin_user) {
        if ($admin_user->username == $request->username) {
            return "hata";
        }
    }
    
    $password = Hash::make($request->password);
    
    admin_kayit_model::create(['username' => $request->username, 'password' => $password]);
    şeklinde yaparsan buradaki problemini çözersin.

    AMA

    burada büyük bir mantık hatası var. databaseden tüm datayı çekip içinde gezerek validasyon yapmak hiç mantıklı değil.
    heleki bu veri büyüdüğünde veya başka bir kontrol daha yapmak istediğinde işler iyice çığırından çıkar.

    Bu validasyonlar için laravelin kendi yapası var zaten.

    Örnek konu anlatımı: https://www.sakirmehmetoglu.com.tr/l...tion-islemleri
    Resmi döküman: https://laravel.com/docs/7.x/validation

    Buradaki unique kuralı senin işini hem çok basit şekilde, hemde böyle php tarafında değil direk database sorgusu ile çözecektir.
    Bu tarz işlemleri bunlarla yapmanı öneririm.
  • 04-04-2020, 14:18:00
    #3
    nozkok adlı üyeden alıntı: mesajı görüntüle
    <?php
    
    $admin_users = admin_kayit_model::all();
    
    foreach ($admin_users as $admin_user) {
        if ($admin_user->username == $request->username) {
            return "hata";
        }
    }
    
    $password = Hash::make($request->password);
    
    admin_kayit_model::create(['username' => $request->username, 'password' => $password]);
    şeklinde yaparsan buradaki problemini çözersin.

    AMA

    burada büyük bir mantık hatası var. databaseden tüm datayı çekip içinde gezerek validasyon yapmak hiç mantıklı değil.
    heleki bu veri büyüdüğünde veya başka bir kontrol daha yapmak istediğinde işler iyice çığırından çıkar.

    Bu validasyonlar için laravelin kendi yapası var zaten.

    Örnek konu anlatımı: https://www.sakirmehmetoglu.com.tr/l...tion-islemleri
    Resmi döküman: https://laravel.com/docs/7.x/validation

    Buradaki unique kuralı senin işini hem çok basit şekilde, hemde böyle php tarafında değil direk database sorgusu ile çözecektir.
    Bu tarz işlemleri bunlarla yapmanı öneririm.
    Hocam evet bu hiç aklımda gelmemişti doğru diyosunuz.unique yapısını inceledim fakat tam anlayamadım.çoğu kişi migration kullanarak yapmış fakat ben databasi kendim oluşturdum.Nasıl oluyorda veritabanından karşılaştırma yapıyor.Vaktiniz varsa kullanımını açıklarsanız sevinirim
  • 04-04-2020, 14:31:00
    #4


    attığım linkte şu bölümde nasıl yapıldığını anlatıyor zaten.
    migration ile bu validation farklı şeyler.
    database'i el ile oluşturman kötü bişey ama buradaki durumu etkilemez.
  • 04-04-2020, 14:44:50
    #5
    nozkok adlı üyeden alıntı: mesajı görüntüle


    attığım linkte şu bölümde nasıl yapıldığını anlatıyor zaten.
    migration ile bu validation farklı şeyler.
    database'i el ile oluşturman kötü bişey ama buradaki durumu etkilemez.
    Hocam son olarak elle database oluşturmanın dezavantajları nedir acaba?
  • 04-04-2020, 18:36:59
    #6
    İlk önce veritabanı dizaynını versiyon kontrol sistemi içinde tutmuş oluyorsun.
    Yapılan değişiklikleri VCS altında tutmuş oluyorsun

    Sonra lokalinde yaptığın database değişikliği ile serverda olan değişiklikleri laravel migration yapısı sayesinde senkronlayabiliyorsun.

    Veya sen veritabanında bir değişiklik yaptın. aynı projede beraber çalıştığın ekip arkadaşlarına bu zahmetsizce vermiş oluyorsun. öteki türlü yaptığın değişikliği dağıtmakla uğraşacaksın.

    Veya projen için bir test ortamın varsa projeyi oraya gönderirken her seferinde database kurmak yerine direk migrationlar sayesinde temiz bir database ile test ortamı kurulumunu yapabiliyorsun.

    Veya ekibe/projeye yeni bir arkadaş dahil oldu. ona database i de manuel oluşturmak kurmak ve güncellemeleride manuel yönetmek zorunda kalıyorsun.

    vs vs.
  • 04-04-2020, 21:49:41
    #7
    nozkok adlı üyeden alıntı: mesajı görüntüle
    İlk önce veritabanı dizaynını versiyon kontrol sistemi içinde tutmuş oluyorsun.
    Yapılan değişiklikleri VCS altında tutmuş oluyorsun

    Sonra lokalinde yaptığın database değişikliği ile serverda olan değişiklikleri laravel migration yapısı sayesinde senkronlayabiliyorsun.

    Veya sen veritabanında bir değişiklik yaptın. aynı projede beraber çalıştığın ekip arkadaşlarına bu zahmetsizce vermiş oluyorsun. öteki türlü yaptığın değişikliği dağıtmakla uğraşacaksın.

    Veya projen için bir test ortamın varsa projeyi oraya gönderirken her seferinde database kurmak yerine direk migrationlar sayesinde temiz bir database ile test ortamı kurulumunu yapabiliyorsun.

    Veya ekibe/projeye yeni bir arkadaş dahil oldu. ona database i de manuel oluşturmak kurmak ve güncellemeleride manuel yönetmek zorunda kalıyorsun.

    vs vs.
    teşekkürler açıklamanız için
  • 10-04-2020, 03:16:04
    #8
    Üyeliği durduruldu
    public function store(Request $request)
    {
    try {
    $validator = Validator::make($request->all(),
    [
    'name' => 'required|max:100|min:4',
    'username' => 'required|alpha_dash|max:32|min:4|unique:users',
    'email' => 'required|email|unique:users',
    'password' => 'required|max:32|min:8|same:confirm-password',
    'avatar' => 'mimes:jpg,jpeg,png,gif,bmp',
    ]
    );
    if ($validator->fails()) {
    return redirect()->back()->withErrors($validator->errors()->all());
    }
    $input = $request->all();
    $input['password'] = Hash::make($input['password']);
    $user = new User();
    $user->name = $request->name;
    $user->username = $request->username;
    $user->email = $request->email;
    $user->telephone = $request->telephone;
    $user->gender = $request->gender;
    $user->password = Hash::make($request->password);
    if ($request->hasFile('avatar')) {
    $file = $request->file('avatar');
    $filename = str_slug($user->username) . '.' . $file->getClientOriginalExtension();
    $user->avatar = $filename;
    File::makeDirectory(public_path('uploads/users'), 0777, true, true);
    Image::make($file->getRealPath())->resize(300, 300)->save(public_path('uploads/users/' . $filename), 100);
    }
    $user->save();
    return redirect()->route('users.list')->withSuccess(trans('dashboard.alerts.successmessage'));
    } catch (\Exception $e) {
    return redirect()->back()->withError(trans('dashboard.alerts.errormessage'));
    }
        }