Обнаружено нечисловое значение Laravel Query Builder - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть работающая функция, но вдруг она теперь выдает ошибку.

в HandleExceptions-> handleError (2, 'Обнаружено нечисловое значение', 'C: \ xampp \ htdocs\ fdis-laravel \ app \ Receivable.php ', 67, массив (' receivable_payment_head_id '=> null,' total_receivable '=>' 936.341 ')) в строке Receivable.php 67

Вот мойкод с использованием 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;
}

Есть ли способ, которым я могу решить нечисловую проблему с DB: raw или мне нужно сначала преобразовать это в числовое значение перед обновлением?Я использую Laravel 5.4 и PHP 7.1.

Ответы [ 3 ]

0 голосов
/ 18 февраля 2019

В вашем коде здесь: 'total_receivables' - $total_receivable и здесь: 'total_payment' - $total_receivable вы пытаетесь вычесть число из строки, это ошибка php 7.1.

Вы должны получить total_receivables и total_receivables отдельно и вычтите, затем обновите таблицу.

0 голосов
/ 18 февраля 2019

В вашей БД :: raw.

DB::raw('total_receivables' - $total_receivable) по существу попытается вычесть значение $total_receivable из строки total_receivables.Тем не менее, я считаю, что вам нужно вычесть это из значения столбца total_receivable.Затем вам нужно изменить его на:

DB::raw('total_receivables - ' . $total_receivable )

Пожалуйста, проверьте обновленный код:

<?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;
}
0 голосов
/ 18 февраля 2019

Вам нужно преобразовать это в числовой формат, для которого вы можете определить тип параметра функции следующим образом:

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