laravel Eloquent ORM metoda ORM delete() (Programare, Php, Laravel, Laravel Eloquent)

Evol Rof a intrebat.

Bună ziua, studiez laravel.Folosesc metoda Eloquent ORM delete, dar obțin un rezultat diferit.Nu true sau false, ci null.Am setat o rută de resurse și există o metodă de distrugere în UsersController.

public function destroy($id){

  $res=User::find($id)->delete();
  if ($res){
    $data=[
    'status'=>'1',
    'msg'=>'success'
  ];
  }else{
    $data=[
    'status'=>'0',
    'msg'=>'fail'
  ];
  return response()->json($data);

Dar întotdeauna primesc un răspuns {„status”: „0”, „msg”: „failed”}, înregistrarea din baza de date este ștearsă.

Apoi folosesc dd($res) .Se afișează null în pagină.

Dar din curs am învățat că returnează o valoare booleană true sau false.

Este vreo eroare în codul meu?

Puteți să-mi spuneți o altă metodă prin care să pot obține un rezultat boolean atunci când șterg date din baza de date?

6 răspunsuri
AddWeb Solution Pvt Ltd

Cred că puteți schimba interogarea dvs. și încercați-o ca :

$res=User::where('id',$id)->delete();

Sagar Gautam

La început,

Ar trebui să știți că destroy() este metoda corectă pentru a elimina o entitate direct prin intermediul unui obiect sau al unui model și delete() poate fi apelată doar în query builder.

În cazul dvs., nu ați verificat dacă înregistrarea există sau nu în baza de date. Înregistrarea poate fi ștearsă numai dacă există.

Prin urmare, puteți proceda după cum urmează.

$user = User::find($id);
    if($user){
        $destroy = User::destroy(2);
    }

Valoarea sau $destroy de mai sus va fi 0 sau 1 în caz de eșec sau, respectiv, de succes. Prin urmare, puteți modifica $data array ca:

if ($destroy){

    $data=[
        'status'=>'1',
        'msg'=>'success'
    ];

}else{

    $data=[
        'status'=>'0',
        'msg'=>'fail'
    ];

}

Sper că ați înțeles.

Comentarii

  • Mulțumesc pentru notă.Am folosit constructorul de interogări (where) și funcționează.Apoi am încercat User::destroy($id) care returnează 0.Dar înregistrarea din tabel dispare.Am o cheie externă pe id, acesta este motivul pentru care primesc un rezultat zero în timp ce ștergerea funcționează? –  > Por Evol Rof.
Evol Rof

Înainte de delete , există mai multe metode în laravel.

User::find(1) și User::first() returnează o instanță.

User::where('id',1)->get și User::all() returnează o colecție de instanțe.

apelați delete pe o instanță de model va returna true/false

$user=User::find(1);
$user->delete(); //returns true/false

apel delete pe o colecție de instanțe va returna un număr care reprezintă numărul de înregistrări care au fost șterse.

//assume you have 10 users, id from 1 to 10;
$result=User::where('id','<',11)->delete(); //returns 11 (the number of the records had been deleted)

//lets call delete again
$result2=User::where('id','<',11)->delete(); //returns 0 (we have already delete the id<11 users, so this time we delete nothing, the result should be the number of the records had been deleted(0)  ) 

De asemenea, există și alte metode de ștergere, puteți apela la destroy ca o metodă statică a modelului, ca mai jos

$result=User::destroy(1,2,3);
$result=User::destroy([1,2,3]);
$result=User::destroy(collect([1, 2, 3]));
//these 3 statement do the same thing, delete id =1,2,3 users, returns the number of the records had been deleted

Încă un lucru, dacă nu sunteți familiarizați cu laravel puteți utiliza php artisan tinker pentru a vedea rezultatul, ceea ce este mai eficient și apoi dd($result) , print_r($result);

Abdelsalam Shahlol

Laravel Eloquent oferă destroy() funcția în care se returnează boolean valoarea. Deci, dacă o înregistrare există în baza de date și este ștearsă veți obține true altfel false.

Iată un exemplu folosind Laravel Tinker shell.

În acest caz, codul dvs. ar trebui să arate astfel:

public function destroy($id)
    {
        $res = User::destroy($id);
        if ($res) {
            return response()->json([
                'status' => '1',
                'msg' => 'success'
            ]);
        } else {
            return response()->json([
                'status' => '0',
                'msg' => 'fail'
            ]);
        }
    }

Mai multe informații despre Laravel Eloquent Ștergerea modelelor

Ahmed Amir
$model=User::where('id',$id)->delete();

ßãlãjî

verificați înainte de a șterge utilizatorul, în caz contrar aruncă o eroare exeption

$user=User::find($request->id);
  
   if($user)
   {
   // return $user;           <------------------------user exist
       if($user->delete()){
         return 'user deleted';
         }
    else{
       return "something wrong";
        }   

   }
  else{
     return "user not exist";// <--------------------user not exist
    }