2
votes

Une valeur non numérique a rencontré Laravel Query Builder

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.


1 commentaires

qu'est-ce que vous essayez de faire ici 'total_receivables' - $ total_receivable ?


3 Réponses :


-1
votes

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;
}

1 commentaires

cela n'a rien à voir avec le type de données des paramètres, il faut soustraire un nombre d'une chaîne



0
votes

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.


0 commentaires

2
votes

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;
}


1 commentaires

Merci pour ça !!! Ça marche !!! J'ai une variable nulle, c'est pourquoi !!! Je vous remercie