การตรวจสอบ Laravel หากบันทึกมีอยู่


257

ฉันใหม่กับ Laravel โปรดแก้ตัวคำถามมือใหม่ แต่จะหาได้อย่างไรถ้ามีบันทึกอยู่?

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

ฉันจะทำอะไรที่นี่เพื่อดูว่า$userมีบันทึกหรือไม่


2
การเริ่มต้นคุณต้องดำเนินการ findOrFail () หรือคล้ายกันกับการสอบถามผู้ใช้ $
Mark Baker

9
ที่ไม่ได้ช่วยจริงๆ
Ben

1
ถ้าอย่างนั้นจะทำอะไร? ทำไมไม่ช่วย? $user = User::where('email', '=', Input::get('email'));เพียงแค่สร้างแบบสอบถามใน$userคุณต้องดำเนินการแบบสอบถามนั้น findOrFail()เป็นวิธีหนึ่งในการดำเนินการค้นหานั้น get()จะเป็นอีกวิธีfirstOrFail()หนึ่ง
Mark Baker

2
หากข้อเสนอแนะ "ไม่ช่วยจริงๆ" ลองบอกว่าทำไมมันถึงไม่ช่วยจริงๆเพราะวิธีนี้หมายความว่าเรารู้วิธีปรับปรุง / เปลี่ยนคำแนะนำนั้น
Mark Baker

พิจารณาi.imgur.com/ulqyOiw.pngนี้ไม่จำเป็นต้องบูรณาการล้อ
nikoss

คำตอบ:


565

ขึ้นอยู่กับว่าคุณต้องการทำงานกับผู้ใช้หลังจากนั้นหรือตรวจสอบหากมีอยู่

ถ้าคุณต้องการใช้วัตถุผู้ใช้ถ้ามันมีอยู่:

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

และถ้าคุณต้องการตรวจสอบ

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

หรือแม้กระทั่งดีกว่า

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

20
ถ้าคุณโทรexists()กับบันทึกที่มีอยู่แล้วมันไม่ใช่ให้ข้อผิดพลาด:Call to a member function exists() on null
Volatil3

36
@ Volatil3 คุณกำลังทำอะไรผิดไป คุณไม่สามารถโทรหาได้หลังจากที่คุณสืบค้นแล้ว
lukasgeiter

7
@lukasgeiter เดาว่าคุณพูดถูก ฉันได้โทรไปแล้วfirst()
Volatil3

1
ฉันคิดว่านี่เป็นวิธีที่ดีกว่าในการค้นหาว่ามีผู้ใช้อยู่หรือไม่ ผู้ใช้ :: โดยที่ ('อีเมล', '=', 'ค่า') -> นับ ()> 0;
Janaka Pushpakumara

1
@ Volatil3 ฉันเพิ่งทดสอบ -> มีอยู่ () กับ laravel 5.5 มันบอกว่าเป็นเท็จถ้ามันไม่อยู่
Pezhvak

26

หนึ่งในทางออกที่ดีที่สุดคือการใช้firstOrNewหรือfirstOrCreateวิธีการ เอกสารมีรายละเอียดเพิ่มเติมในทั้งสอง


5
ในขณะที่คำถามไม่เหมาะสมฟังก์ชั่นที่มีประโยชน์มาก ความแตกต่างระหว่างทั้งสองคือก่อนหรือใหม่จะสร้างอินสแตนซ์ของโมเดลที่เรียกว่าในขณะที่ firstOrCreate จะบันทึกโมเดลที่สอบถามทันทีดังนั้นคุณต้องอัปเดตการเปลี่ยนแปลงในโมเดลแรกหรือสร้างโมเดล
Gokigooooks

ใช่หรือวิธีคิดอีกอย่างคือใช้firstOrCreateถ้าคุณสามารถส่งคุณสมบัติทั้งหมดได้ในครั้งเดียว (ใช้พารามิเตอร์ตัวที่สอง) แต่ก่อนอื่นให้คุณเลือกตรรกะใหม่ก่อนทำการบันทึก
William Turrell

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

1
นี่ควรเป็นคำตอบที่ยอมรับได้ วิธีที่มีประสิทธิภาพและทุ่มเทที่สุดในการทำคือผ่านexists()วิธีการ
Robo Robok

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

ฝีปากใช้คอลเลกชัน ดูลิงค์ต่อไปนี้: https://laravel.com/docs/5.4/eloquent-collections


2
ใช่ แต่มันไม่ได้ส่งคืนคอลเลกชัน มันส่งคืนออบเจคโมเดลเดียวตามที่คุณคิดว่าผู้ใช้แต่ละรายมีเอกลักษณ์emailดังนั้น->isEmpty()จะเกิดข้อผิดพลาด
user3574492

และถ้าฉันได้รับข้อผิดพลาดต่อไปนี้:Call to a member function isEmpty() on null
Pathros

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

ใช้first()ไม่ใช่count()ถ้าคุณเพียงต้องการตรวจสอบการมีอยู่

first()เป็นได้เร็วขึ้นเพราะมันจะตรวจสอบสำหรับการแข่งขันเดียวในขณะที่count()จำนวนการแข่งขันทั้งหมด


5

ใน laravel eloquent มีค่าเริ่มต้น () วิธีการอ้างอิงตัวอย่างตาม

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


4

Laravel 5.6.26v

เพื่อค้นหาระเบียนที่มีอยู่ผ่านคีย์หลัก (อีเมลหรือรหัส)

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

แล้วก็

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

รวมถึง "ใช้ฐานข้อมูล" และผู้ใช้ชื่อตารางกลายเป็นพหูพจน์โดยใช้แบบสอบถามด้านบนเช่นผู้ใช้กับผู้ใช้


3

วิธีนี้จะตรวจสอบว่ามีอีเมลที่ร้องขออยู่ในตารางผู้ใช้หรือไม่:

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

1

ในตัวควบคุมของคุณ

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

ในมุมมองของคุณ - แสดงข้อความที่มีอยู่แล้ว

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

ทางออกที่ดีที่สุด! แต่ฉันต้องเปลี่ยนชื่อตารางและเพิ่มชื่อคอลัมน์อีเมล:required|unique:users,email|email
marcelo2605

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

จะทำงานกับลอง / จับ

-> get () จะยังคงส่งคืนอาร์เรย์ว่าง



0

มันง่ายที่จะรับรู้ว่ามีบันทึกใด ๆ หรือไม่

$user = User::where('email', '=', Input::get('email'))->get();
if(count($user) > 0)
{
echo "There is data";
}
else
echo "No data";


0

คุณสามารถใช้การตรวจสอบ laravel

แต่รหัสนี้ก็ดีเช่นกัน:

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

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

0

วิธีนี้จะตรวจสอบว่ามีที่อยู่อีเมลเฉพาะในตารางหรือไม่:

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

0

การตรวจสอบnullภายในifข้อความสั่งป้องกัน Laravel ไม่ให้ส่งคืน 404 ทันทีหลังจากการค้นหาสิ้นสุดลง

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

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

    return $user;
}

ดูเหมือนว่ามันจะเรียกใช้เคียวรีสองครั้งหากพบผู้ใช้ แต่ฉันไม่สามารถหาวิธีแก้ปัญหาที่เชื่อถือได้อื่น ๆ


คุณสามารถแทนที่ด้วยfind whereUser::where(id, 1)->first()
Edgar Ortega

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

สามารถเขียนเป็น

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

สิ่งนี้จะส่งกลับจริงหรือเท็จโดยไม่ได้กำหนดตัวแปรชั่วคราวหากนั่นคือทั้งหมดที่คุณใช้ $ user สำหรับในคำสั่งเดิม


0

ฉันคิดว่าด้านล่างเป็นวิธีที่ง่ายที่สุดในการบรรลุเป้าหมายเดียวกัน:

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

0

สร้างวิธีการด้านล่าง (สำหรับตัวเอง) เพื่อตรวจสอบว่ามีรหัสบันทึกที่ระบุอยู่ในตาราง Db หรือไม่

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

หน้าแรกมันช่วย!


0

วิธีที่ง่ายที่สุดที่จะทำ

    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 หรือด้านบน:เขียนชื่อตารางจากนั้นกำหนดเงื่อนไขเงื่อนไข clause เช่น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

วิธีที่มีประสิทธิภาพในการตรวจสอบว่ามีบันทึกอยู่หรือไม่คุณต้องใช้วิธี is_null เพื่อตรวจสอบกับแบบสอบถาม

รหัสด้านล่างอาจมีประโยชน์:

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

-1

ตัวเลือกการทำงานสั้นที่สุด:

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

นี่เป็นรหัสง่าย ๆ ในการตรวจสอบว่ามีอีเมลอยู่หรือไม่ในฐานข้อมูล

    $ data = $ request-> all ();
    $ user = DB :: table ('User') -> pluck ('email') -> toArray ();
    ถ้า (in_array ($ ผู้ใช้ข้อมูล $ [ 'อีเมล']))
    {
    echo 'อีเมลที่มีอยู่';
    }


8
หากคุณมีตารางผู้ใช้ที่มี ... พูดมากกว่า 1,000,000 บันทึกคุณจะตรวจสอบนาน
veeeeeeery
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.