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?


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
}

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.


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
}

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


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', 'user@email.com')->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.


5

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

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


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


3

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

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

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

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


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

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

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

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

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 
}

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.


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.


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!
    }

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!


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!');
}

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.');
        }

    }

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...
}

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


-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';
    }


8
Jika Anda memiliki Pengguna meja dengan ... katakan lebih dari 1.000.000 catatan, Anda akan memeriksa untuk waktu yang lama
TrueStory
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.