0
votes

Comment faire fonctionner ce code pour stocker à Laravel. Pas d'erreurs et pas de stockage

Je ne peux pas stocker le nom et l'adresse IP à DB. J'ai créé une table 'Info' avec des champs appropriés en exécutant PHP Artisan Migrate.

Un schéma xxx

modèle pour info xxx

Peut-être que le problème est dans mon homécontrôleur où je reçois ces variables? xxx

mes itinéraires dans web.php xxx

});

mais ça ne marche pas. Ne donne aucune erreur et aucun enregistrement dans dB.

Quelque chose me fait penser que cela a à voir avec ma fonction d'index. J'ai reçu des informations dans l'index de fonction et peut-être que la fonction fonctionne n'a pas d'indice ce que je veux dire.


12 commentaires

Comment appelez-vous votre itinéraire? (Forme, postman, etc.)


@mdexp in web.php j'ai la route :: Post ('/ Home', 'HomeController @ Store'); Dans homecontroller (home.blade.php), je reçois une adresse IP et nom. Ensuite, je voudrais le stocker à dB.


Je voulais dire comment exécutez-vous réellement cet itinéraire? Utilisez-vous Postman pour faire un appel Post HTTP?


@mdexp non, je n'ai pas


@MDEXP à quoi cela ressemblerait?


Avez-vous un formulaire à la maison? Si oui, pouvez-vous poster celui-ci aussi?


@MDEXP Eh bien, si je n'ai pas d'API?


@MDEXP je n'ai pas de forme. Je reçois ces informations de l'authentification et de la demande (voir ci-dessus dans la question).


@MDExp je pense que je reçois ce que vous parlez. J'ai Ran PHP Artisan marque: Auth et j'ai une page de connexion avec un formulaire. Dois-je pointer mon itinéraire :: Poste à ma page de connexion? Mais quand j'ai fait cela, cela a rafraîchi ma page (champs de formulaire) et encore rien dans dB.


@MDEXP J'ai ajouté mes itinéraires dans la question.


Corrigez-moi si je me trompe: essayez-vous d'enregistrer IP et nom de l'utilisateur connecté à la base de données à chaque fois qu'il visitez le / home itinéraire après la connexion?


@MDEXP vous êtes absolument correct! C'est la tâche que j'essaie d'accomplir.


3 Réponses :


0
votes

Comment appelez-vous les fonctions? Il y a un couple de choses qui ne va pas avec votre code, mais vous dites qu'il n'y a pas de faute du tout.

Tout d'abord, votre info :: Créer L'appel n'a pas besoin du ['info' => $ Demande-> entrée ('info')] info. En effet, votre modèle d'information n'a pas de bien de base de données appelé info , mais nous obtiendrez normalement une erreur évidente avec l'approche, c'est pourquoi j'attends que vous appelez également la méthode du magasin de manière incorrecte.

appelez la méthode de création comme:

$ infomodel = info :: créer (["nom '=> $ Demande-> entrée (" nom'), "IP '=> $ Demande-> entrée [" IP']]]); < / code>

ou, si vous pouvez garantir votre Demander ne contient que les champs nécessaires (correctement validés), vous pouvez simplement faire

$ infomodel = info :: créer ($ demande-> tout ());

Ajouter un peu plus d'informations à la question sur la manière dont vous appelez Store et nous pouvons probablement résoudre le reste de votre problème.


5 commentaires

Eh bien, c'est tout ce que j'ai. J'appelle ceci dans web.php route :: Post ('/', 'HomeController @ Store');


Êtes-vous sûr de l'entrée («nom»)? Je pensais que nous utilisions cela lorsque vous obtenez des informations de la contribution du formulaire.


Je suppose que la bonne question serait la suivante: comment appeler cette fonction.


Eh bien, vous semblez appeler correctement "magasin". L'entrée ("nom") est ce qui est utilisé pour extraire les données "Nom" du formulaire Soumettre, mais vous devez toujours l'appliquer dans un champ de base de données de l'objet "Info". Dans votre cas, le champ de formulaire et Le champ de base de données a le même nom (par conséquent, pourquoi nous pouvons utiliser la version plus courte), mais utiliser la version plus longue peut vous aider à mieux le comprendre.


J'ai essayé le code que vous avez écrit mais toujours, rien ne se passe. Pas d'erreur cependant.



2
votes

Une action du contrôleur est fondamentalement une méthode qui est généralement exécutée lorsque vous ouvrez une URL (lorsque vous les connectez aux itinéraires).

Dans votre exemple, vous avez connecté deux itinéraires à leurs actions respectives: P>

class Info extends Model
{
    protected $table = 'info';
    protected $fillable = ['ip', 'name'];
}


3 commentaires

Merci pour l'explication. J'ai fait les actions ci-dessus. Maintenant, j'ai une erreur sqlstate [42S02]: table de base ou vue non trouvée: 1146 Table n'existe pas.


J'ai mis à jour ma réponse pour résoudre ce problème, laissez-moi savoir si cela fonctionne!


Ça a marché! Wow, quel tour! Vous avez fait de votre mieux avec une explication et aidant les conseils.



0
votes

Dans votre fonction de magasin à l'intérieur de l'homécarrostroller, utilisez

Info::create([
            'name' => Auth::user()->name,
            'ip' => Request::ip(),
        ]);


0 commentaires