Pemeriksaan Laravel Jika Ada Catatan

258

Saya baru mengenal Laravel. Maafkan pertanyaan pemula tetapi bagaimana saya menemukan jika ada catatan?

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

Apa yang bisa saya lakukan di sini untuk mengetahui apakah $userada catatan?

Ben
sumber
2
Untuk memulai, Anda perlu menjalankan findOrFail () atau serupa dengan $ user query
Mark Baker
9
itu tidak terlalu membantu
Ben
1
Lalu apa fungsinya? Mengapa itu tidak membantu? $user = User::where('email', '=', Input::get('email'));cukup membuat kueri di $user, Anda perlu menjalankan kueri itu. findOrFail()adalah salah satu cara menjalankan kueri itu. get()akan menjadi cara lain, yang firstOrFail()lain
Mark Baker
2
Jika sebuah saran "tidak benar-benar membantu" coba katakan mengapa itu tidak benar-benar membantu, karena dengan begitu itu berarti kita tahu bagaimana meningkatkan / mengubah saran itu
Mark Baker
pertimbangkan ini i.imgur.com/ulqyOiw.png tidak perlu menemukan kembali roda
nikoss

Jawaban:

566

Itu tergantung apakah Anda ingin bekerja dengan pengguna sesudahnya atau hanya memeriksa apakah ada.

Jika Anda ingin menggunakan objek pengguna jika ada:

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

Dan jika Anda hanya ingin memeriksa

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

Atau bahkan lebih baik

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
lukasgeiter
sumber
20
jika Anda menelepon exists()dengan catatan yang tidak ada maka memberikan kesalahan:Call to a member function exists() on null
Volatil3
36
@ Volatil3 Anda melakukan sesuatu yang salah. Anda tidak dapat memanggil ada setelah menjalankan kueri
lukasgeiter
7
@lukasgeiter kira Anda benar. Saya sudah meneleponfirst()
Volatil3
1
Saya pikir ini adalah cara yang lebih baik untuk menemukan apakah ada Pengguna. Pengguna :: where ('email', '=', 'value') -> count ()> 0;
Janaka Pushpakumara
1
@ Volatil3 saya baru saja menguji -> exist () dengan laravel 5.5, dikatakan false jika tidak ada.
Pezhvak
26

Salah satu solusi terbaik adalah dengan menggunakan metode firstOrNewatau firstOrCreate. The dokumentasi memiliki rincian lebih lanjut tentang kedua.

tapos ghosh
sumber
5
meski tidak pas dengan pertanyaan, tetap saja fungsinya sangat bermanfaat. perbedaan antara keduanya adalah firstOrNew membuat instantiates dari model yang dipanggil sementara firstOrCreate menyimpan model yang ditanyakan secara instan sehingga Anda perlu memperbarui perubahan pada model firstOrCreate'd.
Gokigooooks
Yap, atau cara lain untuk memikirkannya adalah, gunakan firstOrCreate jika Anda dapat melewatkan semua atribut sekaligus (gunakan parameter kedua), tetapi firstOrNew jika Anda akan memerlukan logika lebih lanjut sebelum menyimpan.
William Turrell
22
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
lucidlogic
sumber
1
Ini harus menjadi jawaban yang diterima. Cara paling efisien dan berdedikasi untuk melakukannya adalah melalui exists()metode ini.
Robo Robok
12
if($user->isEmpty()){
    // has no records
}

Fasih menggunakan koleksi. Lihat tautan berikut: https://laravel.com/docs/5.4/eloquent-collections

Nabil
sumber
2
Ya tapi itu tidak mengembalikan koleksi. Ini mengembalikan objek model tunggal karena Anda akan menganggap setiap pengguna memiliki yang unik emailsehingga ->isEmpty()akan menimbulkan kesalahan.
user3574492
Dan bagaimana jika saya mendapatkan kesalahan berikut:Call to a member function isEmpty() on null
Pathros
6
if (User::where('email', '[email protected]')->first())
    // It exists
else
    // It does not exist

Gunakan first(), tidak count()jika Anda hanya perlu memeriksa keberadaannya.

first()adalah lebih cepat karena memeriksa satu pertandingan sedangkan count()jumlah semua pertandingan.

doncadavona
sumber
5

Dalam laravel fasih, ada metode default exist (), lihat contoh berikut.

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

Dhanushka Udayanga
sumber
4

Laravel 5.6.26v

untuk menemukan catatan yang ada melalui kunci utama (email atau id)

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

kemudian

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

termasuk "gunakan DB" dan nama tabel pengguna menjadi jamak menggunakan kueri di atas seperti pengguna ke pengguna

Nadeem Qasmi
sumber
3

Ini akan memeriksa apakah email yang diminta ada di tabel pengguna:

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

Di Controller Anda

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

Dalam Tampilan Anda - Tampilkan Pesan Sudah Ada

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
Karthik
sumber
Solusi terbaik! Tapi saya perlu mengubah nama tabel dan menambahkan nama kolom email:required|unique:users,email|email
marcelo2605
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

akan bekerja dengan coba / tangkap

-> get () masih akan mengembalikan array kosong

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

Sangat mudah untuk mengetahui apakah ada catatan atau tidak

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";
Rashi Goyal
sumber
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
Mathesh Raj
sumber
0

Anda dapat menggunakan validasi laravel.

Tetapi kode ini juga bagus:

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

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

Ini akan memeriksa apakah alamat email tertentu ada di tabel:

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

Memeriksa nulldalam ifpernyataan mencegah Laravel mengembalikan 404 segera setelah kueri berakhir.

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

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

    return $user;
}

Sepertinya menjalankan kueri ganda jika pengguna ditemukan, tapi sepertinya saya tidak dapat menemukan solusi andal lainnya.

Arthur Tarasov
sumber
Anda bisa menggantinya finddengan where. User::where(id, 1)->first()
Edgar Ortega
0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

dapat ditulis sebagai

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

Ini akan mengembalikan benar atau salah tanpa menetapkan variabel sementara jika hanya itu yang Anda gunakan $ user dalam pernyataan asli.

Chawker21
sumber
0

Saya pikir cara di bawah ini adalah cara paling sederhana untuk mencapai yang sama:

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

Metode yang dibuat di bawah ini (untuk saya sendiri) untuk memeriksa apakah id record yang diberikan ada pada tabel Db atau tidak.

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);

Rumah Ini membantu!

rc.adhikari
sumber
0

Cara termudah untuk dilakukan

    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!');
}
Rahul Jat
sumber
0

Laravel 6 atau di atas: Tuliskan nama tabel, lalu berikan kondisi klausa misalnya di mana where ('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.');
        }

    }
Tuan
sumber
0

Cara efisien untuk memeriksa apakah ada catatan Anda harus menggunakan metode is_null untuk memeriksa terhadap permintaan.

Kode di bawah ini mungkin bermanfaat:

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

Opsi kerja terpendek:

// 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();
pembuat roda
sumber
-12

ini kode sederhana untuk memeriksa apakah ada email di database

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    if (in_array ($ user, $ data ['email']))
    {
    echo 'email yang ada';
    }

ram pratap singh
sumber
8
Jika Anda memiliki Pengguna meja dengan ... katakan lebih dari 1.000.000 catatan, Anda akan memeriksa untuk waktu yang lama
TrueStory