#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. К сожалению, я действительно не вижу там ничего, что могло бы вызвать эту ошибку. Я скопировал эту часть приложения, но эта ошибка не появляется.