Kiểm tra Laravel nếu một bản ghi tồn tại


257

Tôi mới đến Laravel. Xin thứ lỗi cho câu hỏi của người mới nhưng làm thế nào để tôi tìm thấy nếu một bản ghi tồn tại?

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

Tôi có thể làm gì ở đây để xem nếu $usercó hồ sơ?


2
Chà, để bắt đầu, bạn cần phải thực hiện findOrFail () hoặc tương tự trên truy vấn $ user
Mark Baker

9
điều đó không thực sự có ích
Ben

1
Vậy thì nó làm gì? Tại sao nó không giúp? $user = User::where('email', '=', Input::get('email'));chỉ cần tạo một truy vấn trong $user, bạn cần thực hiện truy vấn đó. findOrFail()là một cách để thực hiện truy vấn đó. get()sẽ là một cách khác, một cách firstOrFail()khác
Mark Baker

2
Nếu một đề xuất "không thực sự giúp" hãy thử nói lý do tại sao nó không thực sự hữu ích, bởi vì theo cách đó có nghĩa là chúng tôi biết cách cải thiện / thay đổi đề xuất đó
Mark Baker

xem xét điều này i.imgur.com/ulqyOiw.png không cần phải phát minh lại bánh xe
nikoss

Câu trả lời:


565

Nó phụ thuộc vào việc bạn muốn làm việc với người dùng sau đó hay chỉ kiểm tra xem có tồn tại không.

Nếu bạn muốn sử dụng đối tượng người dùng nếu nó tồn tại:

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

Và nếu bạn chỉ muốn kiểm tra

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

Hoặc thậm chí đẹp hơn

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

20
nếu bạn gọi tới exists()một bản ghi không tồn tại thì nó sẽ báo lỗi:Call to a member function exists() on null
Volatil3

36
@ Volatil3 Bạn đang làm gì đó sai. Bạn không thể gọi tồn tại sau khi bạn đã chạy truy vấn
lukasgeiter

7
@lukasgeiter đoán bạn đúng. Tôi đã gọifirst()
Volatil3

1
Tôi nghĩ rằng đây là cách tốt hơn để tìm nếu Người dùng tồn tại. Người dùng :: trong đó ('email', '=', 'value') -> đếm ()> 0;
Janaka Pushpakumara

1
@ Volatil3 tôi vừa thử nghiệm -> tồn tại () với laravel 5.5, nó nói sai nếu nó không tồn tại.
Pezhvak

26

Một trong những giải pháp tốt nhất là sử dụng phương pháp firstOrNewhoặc firstOrCreate. Các tài liệu có nhiều chi tiết hơn về cả hai.


5
Trong khi không phù hợp với câu hỏi, vẫn, các chức năng rất hữu ích. điểm khác biệt giữa hai loại này là FirstOrNew khởi tạo một thể hiện của mô hình được gọi trong khi FirstOrCreate lưu mô hình được truy vấn ngay lập tức, do đó bạn cần cập nhật các thay đổi trên mô hình FirstOrCreate'd.
Gokigooooks

Đúng, hoặc một cách nghĩ khác về nó, hãy sử dụng FirstOrCreate nếu bạn có thể vượt qua tất cả các thuộc tính trong một lần (sử dụng tham số thứ hai), nhưng trước tiên, nếu bạn cần logic hơn trước khi lưu.
William Turrell

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

1
Đây phải là câu trả lời được chấp nhận. Cách hiệu quả và tận tâm nhất để làm điều đó là thông qua exists()phương pháp.
Robo Robok

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

Eloquent sử dụng bộ sưu tập. Xem liên kết sau: https://laravel.com/docs/5.4/eloquent-collections


2
Vâng nhưng nó không trả lại một bộ sưu tập. Nó trả về một đối tượng mô hình duy nhất như bạn cho rằng mỗi người dùng có một duy nhất emailnên ->isEmpty()sẽ gây ra lỗi.
dùng3574492

Và những gì nếu tôi nhận được lỗi sau:Call to a member function isEmpty() on null
Pha-trốt

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

Sử dụng first(), không count()nếu bạn chỉ cần kiểm tra sự tồn tại.

first()nhanh hơn bởi vì nó kiểm tra cho một trận đấu đơn lẻ trong khi count()tính tất cả các trận đấu.


5

Trong tài liệu hùng biện laravel, có phương thức tồn tại mặc định (), tham khảo ví dụ sau.

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


4

Ấu trùng 5.6,26v

để tìm bản ghi hiện có thông qua khóa chính (email hoặc id)

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

sau đó

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

bao gồm "sử dụng DB" và tên người dùng bảng trở thành số nhiều bằng cách sử dụng truy vấn trên như người dùng cho người dùng


3

Điều này sẽ kiểm tra nếu email được yêu cầu tồn tại trong bảng người dùng:

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

1

Trong bộ điều khiển của bạn

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

Trong chế độ xem của bạn - Hiển thị tin nhắn đã tồn tại

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

Giải pháp tốt nhất! Nhưng tôi cần thay đổi tên bảng và thêm tên cột email:required|unique:users,email|email
marcelo2605

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

sẽ làm việc với thử / bắt

-> get () vẫn trả về một mảng trống


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

0

Thật đơn giản để biết nếu có bất kỳ hồ sơ hay không

$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

bạn có thể sử dụng xác nhận laravel.

Nhưng mã này cũng tốt:

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

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

0

Điều này sẽ kiểm tra nếu địa chỉ email cụ thể tồn tại trong bảng:

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

0

Việc kiểm tra nulltrong ifcâu lệnh sẽ ngăn Laravel trả về 404 ngay sau khi truy vấn kết thúc.

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

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

    return $user;
}

Có vẻ như nó chạy truy vấn kép nếu người dùng được tìm thấy, nhưng tôi dường như không thể tìm thấy bất kỳ giải pháp đáng tin cậy nào khác.


Bạn có thể thay thế findbằng where. User::where(id, 1)->first()
Edgar Ortega

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

có thể được viết như

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

Điều này sẽ trả về đúng hoặc sai mà không chỉ định một biến tạm thời nếu đó là tất cả những gì bạn đang sử dụng $ user trong câu lệnh gốc.


0

Tôi nghĩ cách dưới đây là cách đơn giản nhất để đạt được cùng:

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

0

Phương thức được tạo bên dưới (cho chính tôi) để kiểm tra xem id bản ghi đã cho có tồn tại trên bảng Db hay không.

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

Trang chủ Nó giúp!


0

Cách dễ nhất để làm

    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 hoặc trên cùng: Viết tên bảng, sau đó đưa ra điều kiện mệnh đề ví dụ trong đó ('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

Cách hiệu quả để kiểm tra xem bản ghi có tồn tại hay không, bạn phải sử dụng phương thức is_null để kiểm tra truy vấn.

Mã dưới đây có thể hữu ích:

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

-1

Tùy chọn làm việc ngắn nhất:

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

Đây là mã đơn giản để kiểm tra email có tồn tại hay không trong cơ sở dữ liệu

    $ data = $ request-> all ();
    $ user = DB :: bảng ('Người dùng') -> gảy ('email') -> toArray ();
    if (in_array ($ user, $ data ['email']))
    {
    tiếng vang 'email tồn tại';
    }


8
Nếu bạn có một bảng Người dùng có ... nói hơn 1.000.000.000 hồ sơ, bạn sẽ kiểm tra thời gian dài để nhận quyền
TrueStory
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.