Местные новости.ОШИБКА: Возвращаемое значение App Measure::getData() должно быть экземпляром IlluminateSupport Collection, не возвращено

#php #laravel

#php #laravel

Вопрос:

У меня есть функция:

 public static function getData($operationId = null, $meterId = null, $consoProd = null, $dateIni = null, $dateEnd = null)
    {
        // get the first date
        $measures = Measure::where('source', '1')->orderBy('time', 'asc');

        if ($operationId != null) $measures->where('operation_id', $operationId);
        if ($meterId != null) $measures->where('meter_id', $meterId);
        if ($consoProd != null) $measures->where('conso_prod', $consoProd);
        if ($dateIni != null) $measures->where('time', '>', $dateIni);
        if ($dateEnd != null) $measures->where('time', '<=', $dateEnd);
        $measures = $measures->get()->groupBy(['operation_id', 'meter_id', 'conso_prod']);
        return $measures;

    }
  

Ранее у меня было это с возвращаемым типом : Collection

Я получил эту ошибку, поэтому я удалил возвращаемый тип, просто для отладки.

Но мой код продолжает выдавать мне одну и ту же ошибку снова и снова.

Я попытался очистить кеш с помощью:

 php artisan cache:clear   
php artisan config:clear
php artisan route:clear
php artisan clear-compiled
composer dump-autoload
  

Я также попытался перезапустить php artisan serve

Но моя проблема сохраняется.

Что я должен делать?

Я использую PHP 7.4 / Laravel 7

Вот полный журнал:

 [2020-08-28 07:13:17] local.ERROR: Return value of AppMeasure::getData() must be an instance of IlluminateSupportCollection, none returned {"exception":"[object] (TypeError(code: 0): Return value of App\Measure::getData() must be an instance of Illuminate\Support\Collection, none returned at /home/julien/Code/acc/app/Measure.php:41)
[stacktrace]
#0 /home/julien/Code/acc/app/Jobs/ScanMissingData2.php(38): App\Measure::getData()
#1 [internal function]: App\Jobs\ScanMissingData2->handle()
#2 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): call_user_func_array()
#3 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#4 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure()
#5 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(39): Illuminate\Container\BoundMethod::callBoundMethod()
#6 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/Container.php(596): Illuminate\Container\BoundMethod::call()
#7 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call()
#8 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}()
#9 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#10 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then()
#11 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(83): Illuminate\Bus\Dispatcher->dispatchNow()
#12 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}()
#13 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#14 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85): Illuminate\Pipeline\Pipeline->then()
#15 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(59): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#16 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call()
#17 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(356): Illuminate\Queue\Jobs\Job->fire()
#18 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(306): Illuminate\Queue\Worker->process()
#19 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(132): Illuminate\Queue\Worker->runJob()
#20 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate\Queue\Worker->daemon()
#21 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate\Queue\Console\WorkCommand->runWorker()
#22 /home/julien/Code/acc/vendor/laravel/horizon/src/Console/WorkCommand.php(46): Illuminate\Queue\Console\WorkCommand->handle()
#23 [internal function]: Laravel\Horizon\Console\WorkCommand->handle()
#24 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): call_user_func_array()
#25 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/Util.php(37): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#26 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(95): Illuminate\Container\Util::unwrapIfClosure()
#27 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(39): Illuminate\Container\BoundMethod::callBoundMethod()
#28 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Container/Container.php(596): Illuminate\Container\BoundMethod::call()
#29 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\Container\Container->call()
#30 /home/julien/Code/acc/vendor/symfony/console/Command/Command.php(258): Illuminate\Console\Command->execute()
#31 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run()
#32 /home/julien/Code/acc/vendor/symfony/console/Application.php(911): Illuminate\Console\Command->run()
#33 /home/julien/Code/acc/vendor/symfony/console/Application.php(264): Symfony\Component\Console\Application->doRunCommand()
#34 /home/julien/Code/acc/vendor/symfony/console/Application.php(140): Symfony\Component\Console\Application->doRun()
#35 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run()
#36 /home/julien/Code/acc/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run()
#37 /home/julien/Code/acc/artisan(37): Illuminate\Foundation\Console\Kernel->handle()
#38 {main}
"} 
  

Редактировать:

Вот ScanMissingData2->handle()

 $operationId = null;
        $meterId = null;
        $operations = Measure::getData($operationId, $meterId, null, null, null);

        foreach ($operations as $operationName => $operation) {
            foreach ($operation as $cp => $consoProd) {
                foreach ($consoProd as $prm => $meter) {
                    try {
                        $missingData = MissingData::makeMissingData($meter);
                    } catch (Exception $e) {

                    }
                    if ($missingData != null) {
                        try {
                            factory(MissingData::class)->create($missingData);
                        } catch (QueryException $e) {
//        Do nothing, just don't add it once more
                        }
                    }
                }
            }
        }
  

И app/Measure.php

 <?php

namespace App;

use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesDB;

class Measure extends Model
{
    protected $table = 'measures';
    protected $casts = [
        'time' => 'datetime'
    ];
    public $timestamps = [
        "time"
    ];

    public function meter()
    {
        return $this->belongsTo('AppMeter', 'meter_id', 'prm');
    }

    public function operation()
    {
        return $this->belongsTo('AppOperation', 'operation_id', 'name');
    }

    public static function getData($operationId = null, $meterId = null, $consoProd = null, $dateIni = null, $dateEnd = null)  // removed :Collection
    {
        // get the first date
        $measures = Measure::where('source', 'Pamela')->orderBy('time', 'asc');

        if ($operationId != null) $measures->where('operation_id', $operationId);
        if ($meterId != null) $measures->where('meter_id', $meterId);
        if ($consoProd != null) $measures->where('conso_prod', $consoProd);
        if ($dateIni != null) $measures->where('time', '>', $dateIni);
        if ($dateEnd != null) $measures->where('time', '<=', $dateEnd);
        return $measures->get()->groupBy(['operation_id', 'meter_id', 'conso_prod']);

    }
}
  

Комментарии:

1. Эта конкретная ошибка ( none returned ) указывает на то, что вы вообще не возвращали данные из функции. Если это была ошибка как до, так и после удаления Collection подсказки типа возврата, можете ли вы подтвердить, что номер строки ( /home/julien/Code/acc/app/Measure.php:41 ) находится в функции, которую вы ожидаете запустить?

2. да, я дважды проверил эту ту же функцию.

3. Возможно, стоит опубликовать все содержимое app/Measure.php файла и то, как вы вызываете getData() в App\Jobs\ScanMissingData2->handle()

4. Выполнено. Я добавил его.

5. Спасибо @Juliatzin. К сожалению, я действительно не вижу там ничего, что могло бы вызвать эту ошибку. Я скопировал эту часть приложения, но эта ошибка не появляется.