Вызов db в функции

Я пытаюсь использовать функцию, которую написал в моем файле routes.php:

функция такая:

function userScore($uid) {

    $db = $app->get('db');

    //calcolo punteggio totale 
    $query_punti = $db->table('prodotti_sounding')
    ->where('id_utente', $uid)
    ->select('punti')
    ->get();

    $totale_punti = 0;
    foreach($query_punti as $item) {
       $totale_punti += $item->punti;
    }
}

он возвращает эту ошибку:

Slim Application Error The application could not run because of the following error:

Type: Error Message: Call to a member function get() on null

где я не прав?

РЕДАКТИРОВАТЬ

мой соответствующий код в routes.php после первого ответа:

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
use Illuminate\Database\Connection;
use Slim\Http\UploadedFile;
use Illuminate\Support\Facades\DB as DB;

$container = $app->getContainer();

$app->post('/sendbarcode', function ($request, $response){
            /* parametri barcode */
            /** @var Container $this */
            /** @var Connection $db */

            $barcode = $request->getParsedBodyParam('barcode');
            $id_utente = $request->getParsedBodyParam('id_utente');

            $db = $this->get('db');

            // prepare data for json
            $array['itacheck'] = 0;

            if (checkbarcode($barcode) == 1 ) {
                $array['it_check'] = 1;
                $array['punti'] = 25;
                $array['totalepunti'] = userScore($id_utente);
            }

            $array['barcode'] = $rows;

            if (count($rows) > 0){
                return $response->withJson($array, 200, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_LINE_TERMINATORS);
            } 
        });

function userScore($uid) {

    //calcolo punteggio totale in base alle segnalazioni pregresse
    $query_punti = DB::table('prodotti_sounding')
    ->where('id_utente', $uid)
    ->select('punti')
    ->get();

    // check total points
    $totale_punti = 0;
    foreach($query_punti as $item) {
       $totale_punti += $item->punti;
    }
}
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Преобразование данных с помощью красноречивых аксессоров и мутаторов в Laravel
Laravel поставляется с мощной функцией под названием "Eloquent Accessors and Mutators".
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel с методами присоединения и отсоединения
Отношения "многие ко многим" в Laravel могут быть немного сложными, но с помощью Eloquent ORM и его моделей мы можем сделать это с легкостью. В этой...
0
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка становится $db = $app->get('db');, потому что вы не указали переменную $app. Instaed вы можете использовать это

//calcolo punteggio totale 
$query_punti = DB::table('prodotti_sounding')
    ->where('id_utente', $uid)
    ->select('punti')
    ->get();

DB полное имя класса - \Illuminate\Support\Facades\DB
Править
В этом случае добавьте атрибут $app в аргумент функции

function userScore($uid, $app) {    
    $db = $app->get('db');

у меня не работает ... как мне использовать переменную $ app в этом контексте?

DaFois 05.07.2018 16:57

Тип: RuntimeException Сообщение: не задан корень фасада.

DaFois 05.07.2018 17:14

функция определена внутри routes.php, и в том же файле у меня есть несколько других запросов, которые работают нормально

DaFois 05.07.2018 17:17

Я нашел решение раньше вашего, но ваше решение почти такое же, как у меня, но я передаю объект $ db напрямую. TNX

DaFois 05.07.2018 17:45

Другие вопросы по теме