0
votes

Impossible de sauvegarder les quatre derniers chiffres de la carte à la base de données

Je crée une intégration de paiement à Laravel. De là, je veux enregistrer les 4 derniers chiffres de la carte à la base de données. Voici le tableau que j'ai utilisé pour enregistrer les données à la base de données.

 $return_code = Payment::where('id', $transactionId)->update([
            'return_code' => $status,
            'return_message' => $status == 'success'? 'Successfully Captured': 'Payment Failed - ' .$errorMessage,
            'tx_ref' => $transactionReference,
            'transaction_amount' => !empty($amount) ? $amount : 0.00,
            'brand' => $cardType,
            'last4' => str_pad(substr($maskedPAN, -4), strlen(4), '*', STR_PAD_LEFT),
            'holder' => $cardholderName,
            'expiry' => $expiry,
            'payment_gateway' => 3,
        ]);

        return $status == 'success'?true : false;


3 commentaires

Quel est le type de données de last4 ? Int? Si oui, vous devez changer de varchar (4).


Oui, c'est INT (4), mais il s'agit d'un projet en direct et ne peut pas modifier le type de données de la base de données, car une autre intégration de paiement est en cours d'exécution. Vous n'êtes pas une autre option que nous pouvons faire du code?


Pas tout ce qui est fondamentalement sûr. Ce n'est pas des données entières. L'autre intégration de paiement n'a pas d'importance; C'est "4 derniers" ne devrait pas être un entier non plus non plus. Pourquoi ne pouvez-vous pas faire un changement sur le type de colonne?


3 Réponses :


1
votes

en utilisant int comme le type de données supprimera les zéros de gauche.

Si vous devez le conserver, vous devez passer à Varcharne.

à Laravel Vous pouvez créer un Migration pour le changer ( https://laravel.com/docs/5.8/migrations#Modification -Columns ): xxx

Vous devrez peut-être exécuter compositeur nécessite la doctrine / DBAL

si vous le pouvez 'T Modifier le type de données de colonne, une autre option permettrait de convertir les données en chaîne lors de l'exécution et d'utiliser STR_PAD () fonction, mais je ne pense pas que ce soit une bonne option ici.


0 commentaires

0
votes

Je suppose que vous utilisez mysql.

Depuis votre colonne, c'est un int Vous ne pouvez pas car c'est un numéro et que le numéro n'est pas enregistré avec Zeros à gauche, à moins que vous spécifiez la colonne ZEROFILL int. . Ce que vous pouvez faire, c'est le modifier, alter la colonne et ajouter le zerofill à la colonne (ne pas changer le type) pour remplir avec zéros lorsque le numéro est inférieur à 4 chiffres. .

Aussi, int (4) ne signifie pas que n'accepte que 0 ou 4 chiffres, vous pouvez même stocker 20 ou plus de 4 chiffres, sa plage ne change pas, vous devriez lire < un href = "https://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes"> Ce pour mieux comprendre .


2 commentaires

Voici mon code. Si j'ajoute le Zerofill à la colonne 'Last4', comment devrais-je continuer? Aidez-moi, s'il vous plaît. Fonction publique UP () {SCHEMA :: Table ('Paiements', Fonction (Tableau $ $) {$ Table-> Integer ('Derniers') -> Nullable ();}); }


Je suis désolé pour la réponse tardive. Je pense que vous y parvenez déjà et j'ai trouvé une solution à votre problème, mais voici un lien sur ce que je parlais si vous voulez voir: Stackoverflow.com / A / 35108232



0
votes

Étant donné que vous ne pouvez pas modifier le type de champ de table à partir de int à varchar , une meilleure solution serait de stocker votre valeur en tant que int < / code> comme xxx

puis, utilisez toujours une méthode qui renvoie le nombre de chiffres requis pour récupérer le champ last4 de Paiement xxx


0 commentaires