web-dev-qa-db-fra.com

laravel Méthode Eloquent ORM delete ()

Salut j'étudie laravel. J'utilise la méthode de suppression Eloquent ORM mais j'obtiens un résultat différent. Pas vrai ni faux mais nul. J'ai défini un itinéraire de ressource et il existe une méthode de destruction dans 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);

Mais je reçois toujours une réponse {"status": "0", "msg": "failed"}, l’enregistrement dans la base de données est supprimé.

Ensuite, j'utilise dd ($ res). Il affiche null dans la page.

Mais du cours que j'ai appris, il retourne une valeur booléenne vraie ou fausse.

Y a-t-il une erreur dans mon code?

Pouvez-vous me dire une autre méthode pour obtenir un résultat booléen lorsque je supprime des données de la base de données?

24
Evol Rof

Je pense que vous pouvez changer votre requête et l'essayer comme ceci:

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

En premier,

Vous devez savoir que destroy() est la méthode correcte pour supprimer une entité directement via un objet ou un modèle et que delete() ne peut être appelé que dans le constructeur de requêtes.

Dans votre cas, vous n'avez pas vérifié si l'enregistrement existe dans la base de données ou non. L'enregistrement ne peut être supprimé que s'il existe.

Donc, vous pouvez le faire comme suit.

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

La valeur ou $destroy ci-dessus sera 0 ou 1 en cas d'échec ou de succès, respectivement. Ainsi, vous pouvez modifier le tableau $data comme:

if ($destroy){

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

}else{

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

}

J'espère que tu as compris.

8
Sagar Gautam

Laravel Eloquent fournit la fonction destroy() dans laquelle retourne la valeur boolean. Donc, si un enregistrement existe sur la base de données et supprimé , vous obtiendrez true sinon false.

Voici un exemple utilisant Laravel Tinker Shell .

delete operation result

Dans ce cas, votre code devrait ressembler à ceci:

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

Plus d'infos sur Laravel Eloquent Deleting Models

0
Abdelsalam Shahlol