Laravel Bir Kaydın Var olup olmadığını Kontrol Etme


258

Laravel'de yeniyim. Lütfen acemi sorusuna izin verin, ancak bir kaydın olup olmadığını nasıl bulabilirim?

$user = User::where('email', '=', Input::get('email'));

$userKayıt olup olmadığını görmek için burada ne yapabilirim ?


2
Başlamak için $ kullanıcı sorgusunda bir findOrFail () veya benzeri yürütmeniz gerekir
Mark Baker

9
gerçekten yardımcı olmuyor
Ben

1
O zaman ne yapar? Neden yardımcı olmuyor? $user = User::where('email', '=', Input::get('email'));sadece bir sorgu oluşturur $user, bu sorguyu yürütmeniz gerekir. findOrFail()bu sorguyu yürütmenin bir yoludur. get()başka bir yol olurdu, firstOrFail()başka
Mark Baker

2
Bir öneri "gerçekten işe yaramazsa " neden gerçekten yardımcı olmadığını söylemeyi deneyin , çünkü bu şekilde bu öneriyi nasıl iyileştireceğimizi / değiştireceğimizi bildiğimiz anlamına gelir
Mark Baker

Bu i.imgur.com/ulqyOiw.png düşünün tekerleği yeniden icat etmeye gerek yok
nikoss

Yanıtlar:


566

Bu, daha sonra kullanıcıyla çalışmak veya yalnızca birinin olup olmadığını kontrol etmek isteyip istemediğinize bağlıdır.

Varsa kullanıcı nesnesini kullanmak istiyorsanız:

$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

Ve eğer sadece kontrol etmek istiyorsanız

if (User::where('email', '=', Input::get('email'))->count() > 0) {
   // user found
}

Hatta daha da güzel

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}

20
eğer var exists()olmayan bir kayda karşı Call to a member function exists() on null
ararsanız

36
@ Volatil3 Yanlış bir şey yapıyorsun. Sorguyu çalıştırdıktan sonra var olamaz
lukasgeiter

7
@lukasgeiter haklısın sanırım. Zaten aramıştımfirst()
Volatil3

1
Kullanıcı var olup olmadığını bulmak için daha iyi bir yol olduğunu düşünüyorum. Kullanıcı :: nerede ('e-posta', '=', 'değer') -> sayı ()> 0;
Janaka Pushpakumara

1
@ Volatil3 i test ettim -> laravel 5.5 ile () mevcut (), yoksa yanlış diyor.
Pezhvak

26

En iyi çözümlerden biri firstOrNewveya firstOrCreateyöntemini kullanmaktır . Dokümantasyon hem daha fazla ayrıntı vardır.


5
soruyu yerine getirmese de yine de çok kullanışlı fonksiyonlar ikisi arasındaki fark firstOrNew olmasıdır başlatır sen firstOrCreate'd modeline güncelleme değişikliklere ihtiyaç böylece firstOrCreate anında sorgulanan modeli kaydederken denen modelin bir örneğini.
16:36, Gokigooooks

Evet, bunun düşünce başka bir yolu ya da kullanmak olduğunu firstOrCreate tek seferde tüm özelliklerini geçmesi (ikinci parametre kullanmak) eğer, ancak firstOrNew kaydetmeden önce başka mantığı ihtiyacımız olacak eğer.
William Turrell

22
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

1
Bu kabul edilen cevap olmalı. Bunu yapmanın en etkili ve özel yolu exists()yöntemdir.
Robo Robok

12
if($user->isEmpty()){
    // has no records
}

Anında koleksiyonlar kullanır. Aşağıdaki bağlantıya bakın: https://laravel.com/docs/5.4/eloquent-collections


2
Evet ama koleksiyon geri dönmüyor. Her kullanıcının benzersiz olduğunu varsayarsanız tek bir model nesnesi döndürüyor, emailbu yüzden ->isEmpty()bir hata atacak.
user3574492

Ve eğer aşağıdaki hatayı Call to a member function isEmpty() on null
alırsam

6
if (User::where('email', 'user@email.com')->first())
    // It exists
else
    // It does not exist

Kullanım first()değil count()sadece varlığını denetlemek için gerekiyorsa.

first()daha hızlıdır çünkü tek bir eşleşmeyi denetlerken count()tüm eşleşmeleri sayar.


5

Laravel eloquent, varsayılan olarak var () yöntemi var, aşağıdaki örneğe bakın.

if(User::where('id', $user_id )->exists()){ // your code... }


4

Laravel 5.6.26v

birincil anahtarı (e-posta veya kimlik) kullanarak mevcut kaydı bulmak için

    $user = DB::table('users')->where('email',$email)->first();

sonra

      if(!$user){
             //user is not found 
      }
      if($user){
             // user found 
      }

"DB kullan" ve tablo adı kullanıcı yukarıdaki sorgu gibi kullanıcılara kullanıcı kullanarak çoğul hale


3

Bu, kullanıcı tablosunda istenen e-postanın var olup olmadığını kontrol eder:

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}

2

Denetleyicinizde

$this->validate($request, [
        'email' => 'required|unique:user|email',
    ]); 

Görünümünüzde - Zaten Mevcut Mesajı Görüntüle

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

En iyi çözüm! Ancak tablo adını değiştirmek ve e-posta sütun adı eklemek gerekir:required|unique:users,email|email
marcelo2605

Harika bir çözüm.
Joeri

1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

dene / yakala ile çalışır

-> get () yine de boş bir dizi döndürür


1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif

0

Herhangi bir kayıt olup olmadığını bilmek kolaydır

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";

0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');

0

laravel doğrulamasını kullanabilirsiniz.

Ancak bu kod da iyidir:

$user = User::where('email',  $request->input('email'))->count();

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";

0

Bu, tabloda belirli bir e-posta adresinin olup olmadığını kontrol eder:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}

0

Denetleniyor nulliçinde ifdeyimi sorgu bittikten hemen sonra 404 döndürmesini laravel engeller.

if ( User::find( $userId ) === null ) {

    return "user does not exist";
}
else {
    $user = User::find( $userId );

    return $user;
}

Kullanıcı bulunursa çift sorgu çalıştırıyor gibi görünüyor, ancak başka güvenilir bir çözüm bulamıyorum.


Sen yerini alabilir findile where. User::where(id, 1)->first()
Edgar Ortega

0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

olarak yazılabilir

if (User::where('email', '=', Input::get('email'))->first() === null) {
   // user doesn't exist
}

Bu, orijinal deyimde $ user için kullandığınız geçici bir değişken atamadan true veya false değerini döndürür.


0

Ben aşağıda yol aynı elde etmenin en basit yolu olduğunu düşünüyorum:

    $user = User::where('email', '=', $request->input('email'))->first();
    if ($user) {
       // user doesn't exist!
    }

0

Belirtilen kayıt kimliğinin Db tablosunda olup olmadığını kontrol etmek için aşağıdaki yöntem (kendim için) oluşturuldu.

private function isModelRecordExist($model, $recordId)
{
    if (!$recordId) return false;

    $count = $model->where(['id' => $recordId])->count();

    return $count ? true : false;
}

// To Test
$recordId = 5;
$status = $this->isModelRecordExist( (new MyTestModel()), $recordId);

Ana Sayfa Yardımcı olur!


0

Yapmanın En Kolay Yolu

    public function update(Request $request, $id)
{


    $coupon = Coupon::where('name','=',$request->name)->first(); 

    if($coupon->id != $id){
        $validatedData = $request->validate([
            'discount' => 'required',   
            'name' => 'required|unique:coupons|max:255',      
        ]);
    }


    $requestData = $request->all();
    $coupon = Coupon::findOrFail($id);
    $coupon->update($requestData);
    return redirect('admin/coupons')->with('flash_message', 'Coupon updated!');
}

0

Laravel 6 veya üstünde: Tablo adını yazın, sonra nerede yan tümce koşulu verin, örneğin nerede ('id', $ request-> id)

 public function store(Request $request)
    {

        $target = DB:: table('categories')
                ->where('title', $request->name)
                ->get()->first();
        if ($target === null) { // do what ever you need to do
            $cat = new Category();
            $cat->title = $request->input('name');
            $cat->parent_id = $request->input('parent_id');
            $cat->user_id=auth()->user()->id;
            $cat->save();
            return redirect(route('cats.app'))->with('success', 'App created successfully.');

        }else{ // match found 
            return redirect(route('cats.app'))->with('error', 'App already exists.');
        }

    }

0

Kaydın var olup olmadığını kontrol etmenin etkili yolu sorguyu kontrol etmek için is_null yöntemini kullanmanız gerekir.

Aşağıdaki kod yardımcı olabilir:

$user = User::where('email', '=', Input::get('email'));
if(is_null($user)){
 //user does not exist...
}else{
 //user exists...
}

-1

En kısa çalışma seçenekleri:

// if you need to do something with the user 
if ($user = User::whereEmail(Input::get('email'))->first()) {

    // ...

}

// otherwise
$userExists = User::whereEmail(Input::get('email'))->exists();


-12

Bu, veritabanında e-postanın var olup olmadığını kontrol etmek için basit bir koddur

    $ data = $ request-> all ();
    $ user = DB :: table ('Kullanıcı') -> pluck ('e-posta') -> toArray ();
    if (in_array ($ kullanıcı, $ veri [ 'email']))
    {
    echo 'var olan e-posta';
    }


8
Kullanıcı ile bir tablonuz varsa ... 1000.000.000'dan fazla kayıt söyleyin, uzun süre veeeeeeery için kontrol edeceksiniz
TrueStory
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.