source

레코드 존재 여부 Laravel 확인

factcode 2022. 9. 18. 09:48
반응형

레코드 존재 여부 Laravel 확인

저는 라라벨에 처음 왔어요.레코드가 존재하는지 확인하려면 어떻게 해야 합니까?

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

어떻게 하면 좋을까요?$user기록이 있나요?

나중에 사용자와 함께 작업할지 또는 사용자가 존재하는지 여부만 확인할지 여부에 따라 달라집니다.

사용자 개체가 존재하는 경우 사용할 경우 다음 절차를 수행합니다.

$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
}
if (User::where('email', Input::get('email'))->exists()) {
    // exists
}

larabel uncalent에서는 기본값이 있습니다.exists()method, 다음 예를 참조하십시오.

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

가장 좋은 해결책 중 하나는firstOrNew또는firstOrCreate방법. 문서에는 두 가지 모두에 대한 자세한 내용이 나와 있습니다.

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

웅변은 컬렉션을 사용합니다.다음 링크를 참조하십시오.https://laravel.com/docs/5.4/eloquent-collections

라라벨 5.6.26v

프라이머리 키(이메일 또는 ID)를 사용하여 기존 레코드를 검색합니다.

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

그리고나서

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

"use DB"를 포함하면 테이블 이름 사용자는 위의 쿼리를 사용하여 사용자에게 복수화됩니다.

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

사용하다first(),것은 아니다.count()존재 여부만 확인하면 됩니다.

first()1개의 일치를 체크하기 때문에 고속입니다만,count()는 모든 일치를 카운트합니다.

요청된 이메일이 사용자 테이블에 있는지 확인합니다.

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

조금 늦었지만 사용하려는 사람에게 도움이 될 수 있습니다.User::find()->exists()라라벨이 다른 행동을 보이면서 기록의 존재를 위해find()그리고.where()방법들.e-메일을 주된 열쇠로 하여 상황을 검토해 봅시다.

$result = User::find($email)->exists();

해당 이메일이 포함된 사용자 레코드가 있는 경우 해당 레코드는 반환됩니다.true다만, 그 메일을 가지는 유저가 존재하지 않는 경우, 에러가 발생한다는 것은 혼란스러운 점입니다.

Call to a member function exists() on null.

하지만 이 경우는 다르다.where()것.

$result = User::where("email", $email)->exists();

상술한 조항은 다음과 같다.true기록이 존재하며false기록이 존재하지 않는 경우.그래서 항상 사용하려고 노력하세요.where()기록 유무를 위해서가 아니라find()피하다NULL에러입니다.

컨트롤러 내

$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

확인 중null이내에if문을 지정하면 Larabel이 쿼리가 종료된 직후에 404를 반환하지 않습니다.

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

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

    return $user;
}

사용자가 발견되면 이중 쿼리를 실행하는 것처럼 보이지만, 다른 신뢰할 수 있는 솔루션은 찾을 수 없습니다.

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

시도/실패할 수 있다

->get()은 빈 어레이를 반환한다.

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

심플하고 쾌적하며 이해하기 쉬운 검증 도구

class CustomerController extends Controller
{
    public function register(Request $request)
    {

        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:customers',
            'phone' => 'required|string|max:255|unique:customers',
            'password' => 'required|string|min:6|confirmed',
        ]);

        if ($validator->fails()) {
            return response(['errors' => $validator->errors()->all()], 422);
        }

empty() 함수를 사용하여 이 문제를 해결했습니다.

$user = User::where('email', Input::get('email'))->get()->first();
//for example:
if (!empty($user))
    User::destroy($user->id);

많은 해결책을 보셨지만 마법의 체크 구문은 다음과 같습니다.

$model = App\Flight::findOrFail(1);

$model = App\Flight::where('legs', '>', 100)->firstOrFail();

연관된 모형을 찾을 수 없는 경우 반응 404에서 예외가 자동으로 발생함 모형을 찾을 수 없는 경우 예외를 발생시킬 수 있습니다.이는 루트 또는 컨트롤러에서 특히 유용합니다.nail 메서드와 firstOrFail 메서드는 쿼리의 첫 번째 결과를 가져옵니다.단, 결과가 발견되지 않으면Illuminate\Database\Eloquent\ModelNotFoundException던져질 것이다.

참고 자료: https://laravel.com/docs/5.8/eloquent#retrieving-single-models

테이블에 특정 전자 메일 주소가 있는지 확인합니다.

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

최단 작업 옵션:

// 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();
$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를 사용하고 있는 것이 이것뿐이라면 임시 변수를 할당하지 않고 true 또는 false를 반환합니다.

$user = User::where('email', request('email'))->first();
return (count($user) > 0 ? 'Email Exist' : 'Email Not Exist');

같은 것을 실현하는 가장 간단한 방법은 다음과 같습니다.

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

지정된 레코드 ID가 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);

홈 도움이 됩니다!

가장 쉬운 방법

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

Larabel 6 또는 맨 위: 테이블 이름을 쓴 다음 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.');
        }

    }

동일한 전자 메일을 가진 레코드가 존재하지 않는 경우 데이터베이스에 레코드를 삽입하려면 다음과 같이 하십시오.

$user = User::updateOrCreate(
    ['email' => Input::get('email')],
    ['first_name' => 'Test', 'last_name' => 'Test']
);

updateOrCreate메서드의 첫 번째 인수는 관련 테이블 내에서 레코드를 일의로 식별하는 열을 나열하고 두 번째 인수는 삽입 또는 업데이트할 값으로 구성됩니다.

Larabel upserts documents는 이쪽에서 확인하실 수 있습니다.

고유한 레코드를 삽입하려면 larabel 검증을 사용할 수 있습니다.

$validated = $request->validate([
    'title' => 'required|unique:usersTable,emailAddress|max:255',
]);

다만, 다음의 방법을 사용할 수도 있습니다.

1:

if (User::where('email',  $request->email)->exists())
{
  // object exists
} else {
  // object not found
}

2:

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

if ($user)
{
  // object exists
} else {
  // object not found
}

3:

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

if ($user->isNotEmpty())
{
  // object exists
} else {
  // object not found
}

4:

$user = User::where('email',  $request->email)->firstOrCreate([
      'email' => 'email'
],$request->all());
$userCnt     = User::where("id",1)->count();
if( $userCnt ==0 ){
     //////////record not exists 
}else{
      //////////record exists 
}

주의: 요건에 따른 조건.

  1. 이것을 사용하여 진실 또는 거짓을 얻습니다.

    $user = 사용자::where('email', '=', 입력::get('email')-> exists();

  2. $user와 결과물이 필요한 경우 이 기능을 사용할 수 있습니다.

    $user = 사용자::where('email', '=', 입력::get('email')->get();

이렇게 결과를 확인하고

if(count($user)>0){}
  1. 이런 지혜도 쓸 수 있고

    $user = 사용자::where('email', '=', 입력::get('email');

    if specuser-> spec(){ $user = $user-> get(); }

https://laraveldaily.com/dont-check-record-exists-methods-orcreate-ornew/에 도움이 될 것 같은 링크입니다.

레코드가 존재하는지 여부를 확인하는 효율적인 방법은 is_null 메서드를 사용하여 쿼리에 대해 확인해야 합니다.

다음 코드가 도움이 될 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/27095090/laravel-checking-if-a-record-exists

반응형