1
votes

Je souhaite supprimer une entrée en utilisant ajax dans laravel 5.8

Je veux supprimer une entrée en utilisant ajax dans laravel 5.8 mais chaque fois que j'obtiens une erreur comme une incompatibilité de jeton csrf ou une méthode de publication non autorisée ou une méthode de suppression non autorisée.

J'ai une solution pour tous les problèmes ci-dessus, mais maintenant J'obtiens des erreurs lors de la suppression des données.J'utilise le modèle pour supprimer les données et non le contrôleur.J'utilise $ (nom_modèle) -> (fonction_modèle) pour utiliser le modèle dans le contrôleur.J'ai ajouté avec succès des données à l'aide de cette méthode, mais maintenant j'obtiens une erreur .J'ai joint mon code et la capture d'écran d'erreur ci-dessous.J'ai utilisé un autre modèle dans mon modèle actuel.La table utilisée dans la base de données est la table des utilisateurs.

View.blade.php

public function delete_user($id)
    {
        if(user::find($id)->delete()){
            echo true;
        }else{
            echo false;
        }
    }

Route::resource('ajax', 'ajaxController');

public function destroy(ajax $ajax,$id)
    {
        $data = $ajax->delete_user($id);
        echo json_encode($data);
   }

ajaxcontroller.php

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(document).on('click','.delete_user',function(){
    var id = $(this).attr('data-id');
    var token = $("meta[name='csrf-token']").attr("content");
    $.ajax({
        type: 'DELETE',
        url: "ajax/"+ id,
        data: {
            '_token': token,
            'id': id
        },
        success: function (response) {
            console.log("ASD");
        }
    });
});

<meta name="csrf-token" content="{{ csrf_token() }}">
<button class='delete_user' data-id="{{ $item->id }}">Delete</button>

J'en attendais 1, mais j'en ai eu

une erreur SQLSTATE [42S02]: Table de base ou vue introuvable: 1146 Table 'ajax.ajaxes' n'existe pas (SQL: sélectionnez * parmi 'ajaxes' où id = 52 limite 1) "

Capture d'écran de l'erreur


19 commentaires

Pouvez-vous nous montrer votre itinéraire de contrôleur?


Route :: resource ('ajax', 'ajaxController');


SUPPRIMER | ajax / {ajax} | ajax.destroy | App \ Http \ Controllers \ ajaxController @ destroy | la toile


Pouvez-vous partager le nom de votre table? Il ressort clairement de l'erreur que laravel recherche des ajaxes dans votre base de données. Mais il manque.


le nom de la table est users


Ajoutez simplement la ligne suivante dans votre modèle protected $ table = 'users'; cela fonctionnera pour vous.


Mais l'action n'est pas l'événement atteignant le modèle. Il est coincé dans le contrôleur.


Non Il s'agit d'atteindre le modèle, Dans votre contrôleur, vous utilisez destroy (ajax $ ajax, $ id) qu'est-ce que ajax? Est-ce un modèle pour la table des utilisateurs?


C'est pour appeler le modèle ajax et dans ce modèle, je fais toutes mes opérations de base de données et dans ce modèle, j'utilise le modèle utilisateur pour effectuer l'opération de suppression.


changez le nom de votre modèle en User.php


Je sais que je peux changer de nom de modèle mais je suis là pour une solution qui peut être utile dans toutes les situations


Ensuite, passez par le bloc Noms de table à laravel.com/docs/5.8/eloquent#defining-models . Vous devez utiliser protected $ table = 'users';


@Omi J'ai déjà utilisé cette ligne, encore des erreurs.


pourriez-vous s'il vous plaît poster votre erreur


"Trop peu d'arguments pour fonctionner App \ Http \ Controllers \ AjaxController :: destroy (), 1 passé et exactement 2 attendus"


Changez votre route en Route :: delete ('/ ajax / {id}', 'ajaxcontroller @ destroy')


Nous utilisons des ressources pour réduire le code et l'effort.


Modifiez ensuite votre requête ajax comme suit stackoverflow.com/questions/ 36389669 /…


Merci @Omi votre lien est ma réponse.


3 Réponses :


1
votes

View.blade.php

    public function delete_user($id)
    {
        $data = user::findOrFail($id)->delete();
        if($data == TRUE){
            return $data;
        }else{
            echo false;
        }
    }

ajax.js

public function destroy(request $request,ajax $ajax)
{
    $id = $_POST['id'];
    $data = $ajax->delete_user($id);
    echo json_encode($data);
}
```

ajaxcontroller.php `` `php

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

$(document).on('click','.delete_user',function(){
    var id = $(this).attr('data-id');
    var token = $("meta[name='csrf-token']").attr("content");
        $.ajax({
    type: 'post',
    url: "ajax/"+id,
    data: {
        _token: token,
        _method: 'DELETE',
        id: id,
    },
        success: function (response) {
            console.log("ASD");
        }
    });
});

ajax.php

<meta name="csrf-token" content="{{ csrf_token() }}">
<button class='delete_user' data-id="{{ $item->id }}">Delete</button>


6 commentaires

Ce n'est pas la bonne réponse, cela donne toujours une erreur sur la variable ajax non définie.


N'utilisez pas $ ajax. À la place, utilisez $ request, j'ai modifié le code, veuillez le vérifier maintenant.


La méthode Illuminate \ Http \ Request :: delete_user n'existe pas. "


Utilisez "use Illuminate \ Http \ Request;" au début de votre contrôleur. Je l'ai mentionné ci-dessus. Essayez ceci, votre erreur sera résolue.


Je n'ai pas besoin de l'ajouter manuellement, il était là quand j'ai créé le contrôleur.


@ShubhamDeveloper vous vous trompez, il n'y a pas de méthode sur $ request comme delete_user () Lorsque vous utilisez un modèle par défaut, il est lié à la table. lorsque vous utilisez $ ajax-> delete_user ($ id); le modèle Ajax recherchera des ajaxes de table. donc dans votre modèle, vous devrez spécifier la table à utiliser, car la table ajaxes n'existe pas.



1
votes

Prenez la fonction ci-dessous comme référence et apportez des modifications à votre fonction. J'espère que cela devrait fonctionner.

public function remove(Request $request)
{
    //
    $inputs = $request->all();
    // dd($inputs);
    $serviceid = $request->service_id;
    $delete = $request->ListDoc;
    // dd($updates);
    $update = DB::table('files')->where('service_id', $serviceid)->where('filename',$delete)->delete();
    // dd($updates);
    $posts = 'You have removed this document from the list succesfully';
    // return back()->with('success','you have updated it');
    return response()->json(array('posts'=>$posts), 200);


}


2 commentaires

Oui, car je saisis l'identifiant via la méthode de demande et j'utilise DB avec le nom de la table pour supprimer cette ligne d'identifiant particulière. Parce que dans laravel, les modèles ne fonctionnent parfois pas pour supprimer des données comme ils l'ont mentionné dans leur documentation.


Désolé, je ne sais pas cela, mais je ne sais toujours pas pourquoi cela génère une erreur comme celle-ci, car j'appelle simplement une fonction à partir du modèle.



1
votes
public function delete_user($id)
    {
        if(DB::table('table_name')->where('id',$id)->delete()){
            echo true;
        }else{
            echo false;
        }
    }

1 commentaires

Cela n'atteint pas le modèle.