J'ai une fonction qui fonctionne, mais soudainement, une erreur s'affiche.
at HandleExceptions-> handleError (2, 'Une valeur non numérique rencontrée', 'C: \ xampp \ htdocs \ fdis-laravel \ app \ Receivable.php', 67, array ('Receivable_payment_head_id' => null, 'total_receivable' => '936.341')) dans Receivable.php ligne 67
Voici mon code utilisant DB: Raw.
<?php public static function updateLessPaymentHead($receivable_payment_head_id, $total_receivable) { $payment_head = DB::table('receivables_payment_head') ->where('id', $receivable_payment_head_id) ->update( ['total_receivables' => DB::raw('total_receivables' - $total_receivable), 'total_payment' => DB::raw('total_payment' - $total_receivable), ]); return $payment_head; }
Est-il possible de résoudre le problème non numérique avec DB: raw ou dois-je vous devez d'abord le convertir en numérique avant de mettre à jour? J'utilise Laravel 5.4 et PHP 7.1.
3 Réponses :
Vous devez le convertir au format numérique pour que vous puissiez définir type de données de paramètre de fonction comme celui-ci
public static function updateLessPaymentHead(int $receivable_payment_head_id, int $total_receivable) { $payment_head = DB::table('receivables_payment_head') ->where('id', $receivable_payment_head_id) ->update( ['total_receivables' => DB::raw('total_receivables' - $total_receivable), 'total_payment' => DB::raw('total_payment' - $total_receivable), ]); return $payment_head; }
cela n'a rien à voir avec le type de données des paramètres, il faut soustraire un nombre d'une chaîne
Dans votre code ici: 'total_receivables' - $ total_receivable
et ici: 'total_payment' - $ total_receivable
vous essayez de soustraire un nombre d'une chaîne, c'est une erreur php 7.1.
Vous devez obtenir total_receivables
et total_receivables
séparément et soustraire puis mettre à jour le tableau.
Il y a une erreur dans votre DB :: raw.
DB :: raw ('total_receivables' - $ total_receivable)
essaiera essentiellement de soustraire la valeur de $ total_receivable
de la chaîne total_receivables
. Cependant, je pense que vous devez le soustraire de la valeur de la colonne total_receivable
. Ensuite, vous devez le changer en:
DB :: raw ('total_receivables -'. $ Total_receivable)
Veuillez vérifier le code mis à jour: p >
<?php public static function updateLessPaymentHead($receivable_payment_head_id, $total_receivable) { if(!is_numeric($receivable_payment_head_id) || !is_numeric($total_receivable)){ return []; } $payment_head = DB::table('receivables_payment_head') ->where('id', $receivable_payment_head_id) ->update( [ 'total_receivables' => DB::raw('total_receivables - ' . $total_receivable ), 'total_payment' => DB::raw('total_payment - ' . $total_receivable), ]); return $payment_head; }
Merci pour ça !!! Ça marche !!! J'ai une variable nulle, c'est pourquoi !!! Je vous remercie
qu'est-ce que vous essayez de faire ici
'total_receivables' - $ total_receivable
?