Laravel Sprawdzanie, czy istnieje zapis

257

Jestem nowy w Laravel. Proszę wybaczyć pytanie początkującego, ale jak mogę znaleźć, jeśli istnieje zapis?

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

Co mogę tutaj zrobić, aby sprawdzić, czy $userma zapis?

Ben
źródło
2
Cóż, aby rozpocząć, musisz wykonać findOrFail () lub podobny w zapytaniu użytkownika $
Mark Baker
9
to naprawdę nie pomaga
Ben
1
Więc co to robi? Dlaczego to nie pomaga? $user = User::where('email', '=', Input::get('email'));po prostu tworzy zapytanie w $user, musisz wykonać to zapytanie. findOrFail()jest jednym ze sposobów wykonania tego zapytania. get()byłby inny sposób, firstOrFail()inny
Mark Baker
2
Jeśli sugestia „tak naprawdę nie pomaga”, spróbuj powiedzieć, dlaczego tak naprawdę nie pomaga, ponieważ w ten sposób oznacza to, że wiemy, jak ją poprawić / zmienić
Mark Baker,
rozważ to i.imgur.com/ulqyOiw.png nie trzeba wymyślać koła na nowo
nikoss

Odpowiedzi:

565

To zależy, czy chcesz później pracować z użytkownikiem, czy tylko sprawdzić, czy istnieje.

Jeśli chcesz użyć obiektu użytkownika, jeśli istnieje:

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

A jeśli chcesz tylko sprawdzić

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

A nawet ładniej

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
lukasgeiter
źródło
20
jeśli zadzwonisz exists()przeciwko nieistniejącemu rekordowi, Call to a member function exists() on null
spowoduje
36
@ Volatil3 Robisz coś złego. Nie możesz zadzwonić, istnieje już po uruchomieniu zapytania
lukasgeiter,
7
@lukasgeiter zgadnij, masz rację. Już first()
dzwoniłem
1
Myślę, że to lepszy sposób na sprawdzenie, czy użytkownik istnieje. Użytkownik :: gdzie („email”, „=”, „wartość”) -> count ()> 0;
Janaka Pushpakumara,
1
@ Volatil3 właśnie przetestowałem -> istnieje () z laravel 5.5, mówi fałsz, jeśli nie istnieje.
Pezhvak
26

Jednym z najlepszych rozwiązań jest użycie metody firstOrNewlub firstOrCreate. dokumentacja zawiera więcej szczegółów na temat obu.

tapos ghosh
źródło
5
choć nie pasują do pytania, wciąż bardzo przydatne funkcje. Różnica między nimi jest, że firstOrNew instancję instancji modelu o nazwie podczas firstOrCreate oszczędza poszukiwana modelu natychmiast więc trzeba aktualizować zmiany w modelu firstOrCreate'd.
Gokigooooks
Tak, lub innym sposobem myślenia o tym jest użycie firstOrCreate, jeśli możesz przekazać wszystkie atrybuty za jednym razem (użyj drugiego parametru), ale najpierw OrNew, jeśli będziesz potrzebować dalszej logiki przed zapisaniem.
William Turrell,
21
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
lucidlogic
źródło
1
To powinna być zaakceptowana odpowiedź. Najbardziej efektywnym i dedykowanym sposobem na to jest exists()metoda.
Robo Robok,
12
if($user->isEmpty()){
    // has no records
}

Eloquent używa kolekcji. Zobacz następujący link: https://laravel.com/docs/5.4/eloquent-collections

Nabil
źródło
2
Tak, ale nie zwraca kolekcji. Zwraca pojedynczy obiekt modelu, jak można założyć, że każdy użytkownik ma unikalny obiekt, emailwięc ->isEmpty()zgłosi błąd.
user3574492
A jeśli otrzymam następujący błąd:Call to a member function isEmpty() on null
Pathros
6
if (User::where('email', '[email protected]')->first())
    // It exists
else
    // It does not exist

Używaj first(), nie count()tylko , jeśli musisz tylko sprawdzić istnienie.

first()jest szybszy, ponieważ sprawdza pojedynczy mecz, a count()zlicza wszystkie mecze.

doncadavona
źródło
5

W laravel eloquent, has default exist (), zapoznaj się z przykładem.

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

Dhanushka Udayanga
źródło
4

Laravel 5.6.26v

znaleźć istniejący rekord za pomocą klucza podstawowego (e-mail lub identyfikator)

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

następnie

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

obejmują „use DB”, a nazwa tabeli user staje się liczbą mnogą przy użyciu powyższego zapytania jak user to users

Nadeem Qasmi
źródło
3

Spowoduje to sprawdzenie, czy żądany adres e-mail istnieje w tabeli użytkowników:

if (User::where('email', $request->email)->exists()) {
   //email exists in user table
}
A. Zaman
źródło
1

W twoim kontrolerze

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

W widoku - Wyświetl już istniejącą wiadomość

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
Karthik
źródło
Najlepsze rozwiązanie! Ale muszę zmienić nazwę tabeli i dodać nazwę kolumny e-mail:required|unique:users,email|email
marcelo2605
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

działałby z try / catch

-> get () nadal zwróci pustą tablicę

juliański
źródło
1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif
Mohammad Usman
źródło
0

Łatwo jest dowiedzieć się, czy są jakieś zapisy, czy nie

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

możesz użyć walidacji laravel.

Ale ten kod jest również dobry:

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

if($user > 0)
{
   echo "There is data";
}
else
   echo "No data";
hamidteimouri
źródło
0

Spowoduje to sprawdzenie, czy określony adres e-mail istnieje w tabeli:

if (isset(User::where('email', Input::get('email'))->value('email')))
{
    // Input::get('email') exist in the table 
}
Syed Muzammil Ali
źródło
0

Sprawdzanie instrukcji nullwewnątrz ifuniemożliwia Laravelowi zwrócenie 404 natychmiast po zakończeniu zapytania.

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

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

    return $user;
}

Wygląda na to, że uruchamia podwójne zapytanie, jeśli użytkownik zostanie znaleziony, ale nie mogę znaleźć innego niezawodnego rozwiązania.

Artur Tarasow
źródło
Można wymienić findz where. User::where(id, 1)->first()
Edgar Ortega
0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

można zapisać jako

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

Zwróci wartość prawda lub fałsz bez przypisywania zmiennej tymczasowej, jeśli tylko do tego używasz $ user w oryginalnej instrukcji.

Chawker21
źródło
0

Myślę, że poniższy sposób jest najprostszym sposobem na osiągnięcie tego samego:

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

Utworzono poniżej metodę (dla mnie), aby sprawdzić, czy podany identyfikator rekordu istnieje w tabeli Db, czy nie.

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

Strona główna Pomaga!

rc.adhikari
źródło
0

Najłatwiejszy sposób na zrobienie tego

    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
źródło
0

Laravel 6 lub na górze: wpisz nazwę tabeli, a następnie podaj warunek klauzuli where na przykład 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.');
        }

    }
Lord
źródło
0

Skuteczny sposób sprawdzenia, czy rekord istnieje, należy użyć metody is_null, aby sprawdzić w zapytaniu.

Poniższy kod może być pomocny:

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

Najkrótsze opcje pracy:

// 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();
kołodziej
źródło
-12

jest to prosty kod, aby sprawdzić, czy e-mail istnieje w bazie danych lub nie

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

ram pratap singh
źródło
8
Jeśli masz użytkownika tabeli z ... powiedzmy ponad 1 000 000 000 rekordów, będziesz szukał bardzo długo
TrueStory 15.04.17