Giriş yapmadınız.

#1 31.08.2018 23:32:33

bhdr
Üye
Kayıtlı: 09.06.2018
Mesajlar: 94

findOrFail($id) nedir?

Modellerde arama yapip sonucu getirmek icin Model::find($id); yaziyoruz, peki findOrFail($id) ne ise yariyor? Anladigim kadariyla model yoksa bir hata mesaji donduruyor. Bunu zaten if kosulu ile sorguyu find($id) seklinde yaptigimiz zaman da yapabiliyoruz. Eger ise yaradigi kismi dogru anlayabilmis isem aralarindaki fark nedir?

Çevrimdışı

#2 31.08.2018 23:52:28

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

Yanıt: findOrFail($id) nedir?

findOrFail kullandığınızda kayıt bulunamazsa ModelNotFoundException fırlatır, sadece find kullandığınızda ise kayıt null döner. O yüzden findOrFail try...catch... bloğu ile hatayı yakalamanızı sağlar ve şöyle (bana göre) gayet güzel kod yazmanızı sağlar:

try {
    $user = User::findOrFail($id);
    $user->update([
        'active' = >false
    ]);

    return back()->with('success', 'Kullanıcı başarıyla pasifleştirildi');

} catch (ModelNotFoundException $e) {
    return back()->withErrors('Kullanıcı bulunamadı');
}

Ayrıca App\Exceptions\Handler sayesinde tüm Exception'lar global olarak yakalanabildiği için belirli bir Exception için otomatik işlem yapılmasını sağlayabilirsiniz.

Bunun gibi bir kaç şey daha var ama şimdi yazdığımı düzeltip ekleme yapmayayım, araştırabilirsiniz.

Çevrimiçi

#3 01.09.2018 17:35:17

bhdr
Üye
Kayıtlı: 09.06.2018
Mesajlar: 94

Yanıt: findOrFail($id) nedir?

mgsmus yazdı:

findOrFail kullandığınızda kayıt bulunamazsa ModelNotFoundException fırlatır, sadece find kullandığınızda ise kayıt null döner. O yüzden findOrFail try...catch... bloğu ile hatayı yakalamanızı sağlar ve şöyle (bana göre) gayet güzel kod yazmanızı sağlar:

try {
    $user = User::findOrFail($id);
    $user->update([
        'active' = >false
    ]);

    return back()->with('success', 'Kullanıcı başarıyla pasifleştirildi');

} catch (ModelNotFoundException $e) {
    return back()->withErrors('Kullanıcı bulunamadı');
}

Ayrıca App\Exceptions\Handler sayesinde tüm Exception'lar global olarak yakalanabildiği için belirli bir Exception için otomatik işlem yapılmasını sağlayabilirsiniz.

Bunun gibi bir kaç şey daha var ama şimdi yazdığımı düzeltip ekleme yapmayayım, araştırabilirsiniz.

Teşekkürler hocam..

Çevrimdışı

#4 02.09.2018 14:03:42

elementaryos
Üye
Kayıtlı: 20.04.2017
Mesajlar: 185

Yanıt: findOrFail($id) nedir?

find kullanırsan bulamadım diye "No object" adıyla  patlayacaktır. Bu şekilde direk 404'e yönlendiriyor. Ben try catch yerine if ile alıp abort() ediyorum.  Hoş yani.
abort(404)
abort(401) // unauthorized...

Son düzenleyen elementaryos (02.09.2018 14:04:58)

Çevrimdışı

Forum alt kısmı