Laravel Verificando se um Registro Existe

258

Eu sou novo no Laravel. Desculpe a pergunta do novato, mas como encontro se existe um registro?

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

O que posso fazer aqui para ver se $userpossui um registro?

Ben
fonte
2
Bem, para começar, você precisa para executar um findOrFail () ou similar na consulta $ user
Mark Baker
9
que realmente não ajuda
Ben
1
Então o que isso faz? Por que isso não ajuda? $user = User::where('email', '=', Input::get('email'));simplesmente cria uma consulta $user, você precisa executar essa consulta. findOrFail()é uma maneira de executar essa consulta. get()seria outra maneira, firstOrFail()outra #
Mark Baker
2
Se uma sugestão "não ajuda" tente dizer por que isso realmente não ajuda, porque dessa forma significa que sabemos como melhorar / mudar essa sugestão
Mark Baker
considerar este i.imgur.com/ulqyOiw.png há necessidade de reinventar a roda
nikoss

Respostas:

566

Depende se você deseja trabalhar com o usuário posteriormente ou apenas verificar se existe algum.

Se você deseja usar o objeto de usuário, se existir:

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

E se você quiser apenas verificar

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

Ou ainda melhor

if (User::where('email', '=', Input::get('email'))->exists()) {
   // user found
}
lukasgeiter
fonte
20
se você chamar exists()contra um registro inexistente, ele Call to a member function exists() on null
fornecerá um
36
@ Volatil3 Você está fazendo algo errado. Você não pode chamada existe depois que você já executou a consulta
lukasgeiter
7
@lukasgeiter acho que você está certo. Eu já tinha ligadofirst()
Volatil3 /
1
Eu acho que esta é a melhor maneira de descobrir se o usuário existe. Usuário :: onde ('email', '=', 'valor') -> count ()> 0;
Janaka Pushpakumara
1
@ Volatil3 Acabei de testar -> existe () com o laravel 5.5, diz falso se não existir.
Pezhvak 31/01
26

Uma das melhores soluções é usar o método firstOrNewou firstOrCreate. A documentação tem mais detalhes sobre ambos.

tapos ghosh
fonte
5
embora não se encaixe na pergunta, ainda assim, funções muito úteis. a diferença entre os dois é que firstOrNew instancia uma instância do modelo chamada enquanto firstOrCreate salva o modelo consultado instantaneamente, portanto, é necessário atualizar as alterações no modelo firstOrCreate.
Gokigooooks
Sim, ou outra maneira de pensar, use firstOrCreate se você puder passar todos os atributos de uma só vez (use o segundo parâmetro), mas firstOrNew se precisar de mais lógica antes de salvar.
William Turrell
22
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}
lucidlogic
fonte
1
Essa deve ser a resposta aceita. A maneira mais eficiente e dedicada de fazer isso é através do exists()método
Robo Robok 02/09/19
12
if($user->isEmpty()){
    // has no records
}

Eloquent usa coleções. Veja o seguinte link: https://laravel.com/docs/5.4/eloquent-collections

Nabil
fonte
2
Sim, mas não está retornando uma coleção. Ele está retornando um único objeto de modelo, pois você presumiria que cada usuário tem um único, emailentão ->isEmpty()lançará um erro.
User3574492
E se eu receber o seguinte erro: #Call to a member function isEmpty() on null
Pathros Path
6
if (User::where('email', '[email protected]')->first())
    // It exists
else
    // It does not exist

Use first(), não count()se você só precisa verificar a existência.

first()é mais rápido porque verifica uma única correspondência enquanto count()conta todas as correspondências.

doncadavona
fonte
5

No laravel eloquent, possui o método Existe () padrão, consulte o exemplo a seguir.

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

Dhanushka Udayanga
fonte
4

Laravel 5.6.26v

para encontrar o registro existente por meio da chave primária (email ou ID)

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

então

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

inclua "use DB" e o nome da tabela user se torne plural usando a consulta acima como user to users

Nadeem Qasmi
fonte
3

Isso verificará se o email solicitado existe na tabela de usuários:

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

No seu controlador

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

Na sua visão - a mensagem já existe no display

@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
Karthik
fonte
Melhor solução! Mas preciso alterar o nome da tabela e adicionar o nome da coluna de email:required|unique:users,email|email
marcelo2605
1
if ($u = User::where('email', '=', $value)->first())
{
   // do something with $u
   return 'exists';
} else {
  return 'nope';
}

funcionaria com try / catch

-> get () ainda retornaria uma matriz vazia

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

É simples saber se existem registros ou não

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

você pode usar a validação laravel.

Mas esse código também é bom:

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

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

Isso verificará se um endereço de email específico existe na tabela:

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

A verificação nulldentro da ifinstrução impede que o Laravel retorne 404 imediatamente após o término da consulta.

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

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

    return $user;
}

Parece que ele executa uma consulta dupla se o usuário for encontrado, mas não consigo encontrar nenhuma outra solução confiável.

Arthur Tarasov
fonte
Você pode substituir findpor where. User::where(id, 1)->first()
Edgar Ortega
0
$user = User::where('email', '=', Input::get('email'))->first();
if ($user === null) {
   // user doesn't exist
}

pode ser escrito como

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

Isso retornará verdadeiro ou falso sem atribuir uma variável temporária, se for para isso que você está usando $ user na instrução original.

Chawker21
fonte
0

Eu acho que abaixo é a maneira mais simples de conseguir o mesmo:

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

Criado abaixo do método (para mim) para verificar se o ID do registro fornecido existe na tabela Db ou não.

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

Home Ajuda!

rc.adhikari
fonte
0

A maneira mais fácil de fazer

    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
fonte
0

Laravel 6 ou na parte superior: Escreva o nome da tabela e forneça a condição da cláusula where, por exemplo, 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.');
        }

    }
senhor
fonte
0

A maneira eficiente de verificar se o registro existe, você deve usar o método is_null para verificar a consulta.

O código abaixo pode ser útil:

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

Opções de trabalho mais curtas:

// 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();
fabricante de rodas
fonte
-12

este é um código simples para verificar se o e-mail existe ou não no banco de dados

    $ data = $ request-> all ();
    $ user = DB :: table ('Usuário') -> arrancar ('email') -> toArray ();
    if (in_array ($ user, $ data ['email'])))
    {
    eco 'existiu e-mail';
    }

ram pratap singh
fonte
8
Se você tiver uma tabela com ... digamos mais de 1.000.000.000 de registros, você estará checando por um longo tempo
TrueStory 15/17