Laravel prüft, ob ein Datensatz vorhanden ist


257

Ich bin neu in Laravel. Bitte entschuldigen Sie die Frage des Neulings, aber wie finde ich heraus, ob ein Datensatz vorhanden ist?

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

Was kann ich hier tun, um zu sehen, ob $usereine Aufzeichnung vorliegt?


2
Nun, um zu beginnen, müssen Sie ein findOrFail () oder ähnliches auf der $ user-Abfrage ausführen
Mark Baker

9
das hilft nicht wirklich
Ben

1
Was macht es dann? Warum hilft es nicht? $user = User::where('email', '=', Input::get('email'));Erstellen $userSie einfach eine Abfrage in , müssen Sie diese Abfrage ausführen. findOrFail()ist eine Möglichkeit, diese Abfrage auszuführen. get()wäre ein anderer Weg, ein firstOrFail()anderer
Mark Baker

2
Wenn ein Vorschlag "nicht wirklich hilft", versuchen Sie zu sagen, warum er nicht wirklich hilft, denn auf diese Weise wissen wir, wie wir diesen Vorschlag verbessern / ändern können
Mark Baker,

Betrachten Sie diese i.imgur.com/ulqyOiw.png keine Notwendigkeit, das Rad neu zu erfinden
Nikoss

Antworten:


565

Dies hängt davon ab, ob Sie anschließend mit dem Benutzer arbeiten oder nur prüfen möchten, ob einer vorhanden ist.

Wenn Sie das Benutzerobjekt verwenden möchten, falls vorhanden:

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

Und wenn Sie nur überprüfen möchten

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

Oder noch schöner

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

20
Wenn Sie exists()gegen einen nicht vorhandenen Datensatz aufrufen, wird ein Fehler Call to a member function exists() on null
ausgegeben

36
@ Volatil3 Du machst etwas falsch. Sie können nicht anrufen existiert, nachdem Sie die Abfrage bereits ausgeführt haben
lukasgeiter

7
@ Lukasgeiter denke, du hast recht. Ich hatte bereits angerufenfirst()
Volatil3

1
Ich denke, dies ist der bessere Weg, um herauszufinden, ob ein Benutzer vorhanden ist. User :: where ('email', '=', 'value') -> count ()> 0;
Janaka Pushpakumara

1
@ Volatil3 Ich habe gerade getestet -> existiert () mit Laravel 5.5, es sagt falsch, wenn es nicht existiert.
Pezhvak

26

Eine der besten Lösungen ist die Verwendung der Methode firstOrNewoder firstOrCreate. Die Dokumentation enthält weitere Details zu beiden.


5
Obwohl die Frage nicht passt, sind sie dennoch sehr nützliche Funktionen. Der Unterschied zwischen beiden besteht darin, dass firstOrNew eine Instanz des aufgerufenen Modells instanziiert, während firstOrCreate das abgefragte Modell sofort speichert, sodass Sie Änderungen am firstOrCreate'd-Modell aktualisieren müssen.
Gokigooooks

Ja, oder eine andere Art, darüber nachzudenken, ist firstOrCreate, wenn Sie alle Attribute auf einmal übergeben können (verwenden Sie den zweiten Parameter), aber firstOrNew, wenn Sie vor dem Speichern weitere Logik benötigen.
William Turrell

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

1
Dies sollte die akzeptierte Antwort sein. Der effizienteste und engagierteste Weg, dies zu tun, ist die exists()Methode.
Robo Robok

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

Eloquent verwendet Sammlungen. Siehe den folgenden Link: https://laravel.com/docs/5.4/eloquent-collections


2
Ja, aber es wird keine Sammlung zurückgegeben. Es wird ein einzelnes Modellobjekt zurückgegeben, da Sie annehmen würden, dass jeder Benutzer ein eindeutiges Objekt hat, emailsodass ->isEmpty()ein Fehler ausgegeben wird.
user3574492

Und was ist, wenn ich die folgende Fehlermeldung Call to a member function isEmpty() on null
erhalte

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

Verwenden Sie first(), nicht, count()wenn Sie nur auf Existenz prüfen müssen.

first()ist schneller, weil nach einer einzelnen Übereinstimmung gesucht wird, während count()alle Übereinstimmungen gezählt werden.


5

In Laravel eloquent, hat die Standard-Exist-Methode (), siehe folgendes Beispiel.

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


4

Laravel 5.6.26v

um den vorhandenen Datensatz über den Primärschlüssel (E-Mail oder ID) zu finden

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

dann

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

include "use DB" und Tabellenname user werden unter Verwendung der obigen Abfrage wie user to users plural


3

Dadurch wird überprüft, ob die angeforderte E-Mail in der Benutzertabelle vorhanden ist:

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

1

In Ihrem Controller

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

In Ihrer Ansicht - Bereits vorhandene Nachricht anzeigen

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

Beste Lösung! Aber ich muss den Tabellennamen ändern und den Namen der E-Mail-Spalte hinzufügen:required|unique:users,email|email
marcelo2605

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

würde mit try / catch arbeiten

-> get () würde immer noch ein leeres Array zurückgeben


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

0

Es ist einfach herauszufinden, ob es Aufzeichnungen gibt oder nicht

$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

Sie können die Laravel-Validierung verwenden.

Dieser Code ist aber auch gut:

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

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

0

Dadurch wird überprüft, ob in der Tabelle eine bestimmte E-Mail-Adresse vorhanden ist:

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

0

Überprüfen auf nullinnerhalb ifAnweisung verhindert Laravel von der Rückkehr 404 unmittelbar nach der Abfrage ist vorbei.

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

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

    return $user;
}

Es scheint, als würde eine doppelte Abfrage ausgeführt, wenn der Benutzer gefunden wird, aber ich kann anscheinend keine andere zuverlässige Lösung finden.


Sie könnten ersetzen findmit where. User::where(id, 1)->first()
Edgar Ortega

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

kann geschrieben werden als

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

Dies gibt true oder false zurück, ohne eine temporäre Variable zuzuweisen, wenn dies alles ist, wofür Sie $ user in der ursprünglichen Anweisung verwenden.


0

Ich denke, der folgende Weg ist der einfachste Weg, um dasselbe zu erreichen:

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

0

Erstellt die folgende Methode (für mich), um zu überprüfen, ob die angegebene Datensatz-ID in der Db-Tabelle vorhanden ist oder nicht.

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

Zuhause Es hilft!


0

Der einfachste Weg zu tun

    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 oder oben: Schreiben Sie den Tabellennamen und geben Sie dann die where- Klauselbedingung an, z. B. 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

Um zu überprüfen, ob der Datensatz vorhanden ist, müssen Sie die Methode is_null verwenden, um die Abfrage zu überprüfen.

Der folgende Code könnte hilfreich sein:

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

-1

Kürzeste Arbeitsmöglichkeiten:

// 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

Dies ist ein einfacher Code, mit dem überprüft werden kann, ob E-Mails in der Datenbank vorhanden sind oder nicht

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> zupfen ('email') -> toArray ();
    if (in_array ($ user, $ data ['email']))
    {
    Echo 'existierende E-Mail';
    }}


8
Wenn Sie einen Tabellenbenutzer mit ... sagen wir über 1.000.000.000 Datensätzen haben, werden Sie nach einer sehr langen Zeit
suchen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.