Перевірка Laravel, якщо запис існує


257

Я новачок у Ларавелі. Вибачте, будь ласка, питання для новачків, але як я можу знайти, чи існує запис?

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

Що я можу зробити тут, щоб побачити, чи $userє запис?


2
Ну для початку вам потрібно виконати findOrFail () або подібне на запит користувача $
Mark Baker

9
це насправді не допомагає
Бен

1
Тоді що це робить? Чому це не допомагає? $user = User::where('email', '=', Input::get('email'));просто створює запит в $user, вам потрібно виконати цей запит. findOrFail()- це один із способів виконання цього запиту. get()був би інший спосіб, firstOrFail()інший
Марк Бейкер

2
Якщо пропозиція "насправді не допомагає", спробуйте сказати, чому вона насправді не допомагає, тому що це означає, що ми знаємо, як покращити / змінити цю пропозицію
Марк Бейкер

вважайте це 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
заперечуєте

36
@ Volatil3 Ви щось робите не так. Ви не можете зателефонувати існувати після того, як ви вже виконали запит
lukasgeiter

7
@lukasgeiter гадаєте, ви праві. Я вже зателефонувавfirst()
Volatil3

1
Я думаю, що це кращий спосіб дізнатися, чи існує Користувач. Користувач :: де ('email', '=', 'value') -> count ()> 0;
Янака Пушпакумара

1
@ Volatil3 Я щойно тестував -> існує () з laravel 5.5, він говорить про помилку, якщо її немає.
Пежвак

26

Одним з найкращих рішень є використання методу firstOrNewабо firstOrCreate. Документація має більш детальну інформацію про обох.


5
не підходячи до питання, все-таки дуже корисні функції. різниця між ними полягає в тому, що firstOrNew инициализирует екземпляр моделі під назвою в той час як firstOrCreate зберігає запитувану модель миттєво , так що ви повинні зміни поновлення на моделі firstOrCreate'd.
Gokigooooks

Так, або інший спосіб його думати, використовуйте firstOrCreate, якщо ви можете передавати всі атрибути за один раз (використовуйте другий параметр), але firstOrNew, якщо вам буде потрібна додаткова логіка перед збереженням.
Вільям Террелл

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

1
Це має бути прийнятою відповіддю. Найефективніший і відданий спосіб це зробити через exists()метод.
Робо Робок

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

Красномовно використовує колекції. Дивіться наступне посилання: https://laravel.com/docs/5.4/eloquent-collections


2
Так, але колекція не повертається. Він повертає єдиний об'єкт моделі, як ви вважаєте, кожен користувач має унікальний, emailтому ->isEmpty()викличе помилку.
користувач3574492

А що, якщо я отримаю таку помилку: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 красномовно, є метод за замовчуванням існує (), див. Наступний приклад.

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 
      }

включити "використовувати DB", а ім'я таблиці користувача стає множиною, використовуючи вищезазначений запит, як користувач для користувачів


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';
}

буде працювати з try / catch

-> 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на where. User::where(id, 1)->first()
Едгар Ортега

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
}

Це поверне значення true або false без призначення тимчасової змінної, якщо це все, для чого ви використовуєте $ 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 або вгорі: введіть назву таблиці, а потім вкажіть, де умова пункту, наприклад, де ('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 ();
    if (in_array ($ user, $ data ['email']))
    {
    echo 'існувала електронна пошта';
    }


8
Якщо у вас є користувач таблиці з ... скажімо, понад 1 000 000 000 записів, ви довго перевірятимете veeeeeeery
TrueStory
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.