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?

Ben
quelle
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
}
lukasgeiter
quelle
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.

Tapos Ghosh
quelle
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
}
lucidlogic
quelle
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

Nabil
quelle
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', '[email protected]')->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.

Doncadavona
quelle
5

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

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

Dhanushka Udayanga
quelle
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

Nadeem Qasmi
quelle
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
}
A. Zaman
quelle
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
Karthik
quelle
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

julianisch
quelle
1
$email = User::find($request->email);
If($email->count()>0)
<h1>Email exist, please make new email address</h1>
endif
Mohammad Usman
quelle
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";
Raschi Goyal
quelle
0
$user = User::where('email', request('email')->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');
Mathesh Raj
quelle
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";
hamidteimouri
quelle
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 
}
Syed Muzammil Ali
quelle
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.

Arthur Tarasov
quelle
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.

Chawker21
quelle
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!
    }
ShuBham GuPta
quelle
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!

rc.adhikari
quelle
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!');
}
Rahul Jat
quelle
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.');
        }

    }
Herr
quelle
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...
}
Lawrence E Bosumbe
quelle
-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();
Radmacher
quelle
-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';
    }}

ram pratap singh
quelle
8
Wenn Sie einen Tabellenbenutzer mit ... sagen wir über 1.000.000.000 Datensätzen haben, werden Sie nach einer sehr langen Zeit
suchen