--level used: 0PHPStan is trying to access the Database.
Locally the static code analysis works great because I have a DB connection configured well, but on my CI I don't even have a .env file so it fails.
/{project_path}/app/Util.php
Doctrine\DBAL\Driver\PDO\Exception
SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: YES)
at vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php:18
14â–• final class Exception extends PDOException
15â–• {
16â–• public static function new(\PDOException $exception): self
17â–• {
➜ 18▕ return new self($exception);
19â–• }
20â–• }
21â–•
The issue occurs only with PHPStan's new version 0.12.59
With PHPStan v0.12.58 no issue occurs.
Since I don't have a clear stack trace, I can't tell which line on the Util.php is causing this issue, but it might be this one that access the User.
class Util
{
public static function notifyUsers($data)
{
return User::each(static function ($user) use ($data) {
$user->notify($data);
});
}
}
[previous exception] [object] (PDOException(code: 1045): SQLSTATE[HY000] [1045] Access denied for user 'forge'@'localhost' (using password: YES) at /{project_path}/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:38)
[stacktrace]
#0 /{project_path}/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php(38): PDO->__construct('mysql:host=127....', 'forge', '', Array)
#1 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(67): Doctrine\\DBAL\\Driver\\PDOConnection->__construct('mysql:host=127....', 'forge', '', Array)
#2 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php(46): Illuminate\\Database\\Connectors\\Connector->createPdoConnection('mysql:host=127....', 'forge', '', Array)
#3 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/MySqlConnector.php(24): Illuminate\\Database\\Connectors\\Connector->createConnection('mysql:host=127....', Array, Array)
#4 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(184): Illuminate\\Database\\Connectors\\MySqlConnector->connect(Array)
#5 [internal function]: Illuminate\\Database\\Connectors\\ConnectionFactory->Illuminate\\Database\\Connectors\\{closure}()
#6 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connection.php(939): call_user_func(Object(Closure))
#7 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connection.php(921): Illuminate\\Database\\Connection->getPdo()
#8 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connection.php(901): Illuminate\\Database\\Connection->getDoctrineConnection()
#9 /{project_path}/vendor/grimzy/laravel-mysql-spatial/src/MysqlConnection.php(29): Illuminate\\Database\\Connection->getDoctrineSchemaManager()
#10 /{project_path}/vendor/grimzy/laravel-mysql-spatial/src/Connectors/ConnectionFactory.php(27): Grimzy\\LaravelMysqlSpatial\\MysqlConnection->__construct(Object(Closure), 'forge', '', Array)
#11 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(76): Grimzy\\LaravelMysqlSpatial\\Connectors\\ConnectionFactory->createConnection('mysql', Object(Closure), 'forge', '', Array)
#12 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php(50): Illuminate\\Database\\Connectors\\ConnectionFactory->createSingleConnection(Array)
#13 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(131): Illuminate\\Database\\Connectors\\ConnectionFactory->make(Array, 'mysql')
#14 /{project_path}/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(86): Illuminate\\Database\\DatabaseManager->makeConnection('mysql')
#15 /{project_path}/vendor/laravel/framework/src/Illuminate/Support/Facades/Schema.php(42): Illuminate\\Database\\DatabaseManager->connection()
#16 /{project_path}/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(166): Illuminate\\Support\\Facades\\Schema::getFacadeAccessor()
#17 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Pipes/Facades.php(30): Illuminate\\Support\\Facades\\Facade::getFacadeRoot()
#18 /{project_path}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): NunoMaduro\\Larastan\\Methods\\Pipes\\Facades->handle(Object(NunoMaduro\\Larastan\\Methods\\Passable), Object(Closure))
#19 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Pipes/Contracts.php(36): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(NunoMaduro\\Larastan\\Methods\\Passable))
#20 /{project_path}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): NunoMaduro\\Larastan\\Methods\\Pipes\\Contracts->handle(Object(NunoMaduro\\Larastan\\Methods\\Passable), Object(Closure))
#21 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Pipes/Macros.php(106): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(NunoMaduro\\Larastan\\Methods\\Passable))
#22 /{project_path}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): NunoMaduro\\Larastan\\Methods\\Pipes\\Macros->handle(Object(NunoMaduro\\Larastan\\Methods\\Passable), Object(Closure))
#23 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Pipes/SelfClass.php(25): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(NunoMaduro\\Larastan\\Methods\\Passable))
#24 /{project_path}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): NunoMaduro\\Larastan\\Methods\\Pipes\\SelfClass->handle(Object(NunoMaduro\\Larastan\\Methods\\Passable), Object(Closure))
#25 /{project_path}/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(NunoMaduro\\Larastan\\Methods\\Passable))
#26 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Kernel.php(65): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#27 /{project_path}/vendor/nunomaduro/larastan/src/Methods/Extension.php(51): NunoMaduro\\Larastan\\Methods\\Kernel->handle(Object(PHPStan\\Broker\\Broker), Object(PHPStan\\Reflection\\ClassReflection), 'hasTable')
#28 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Reflection/ClassReflection.php(276): NunoMaduro\\Larastan\\Methods\\Extension->hasMethod(Object(PHPStan\\Reflection\\ClassReflection), 'hasTable')
#29 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Type/ObjectType.php(317): PHPStan\\Reflection\\ClassReflection->hasMethod('hasTable')
#30 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Rules/Methods/CallStaticMethodsRule.php(126): PHPStan\\Type\\ObjectType->hasMethod('hasTable')
#31 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/FileAnalyser.php(70): PHPStan\\Rules\\Methods\\CallStaticMethodsRule->processNode(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#32 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Node/ClassStatementsGatherer.php(91): PHPStan\\Analyser\\FileAnalyser->PHPStan\\Analyser\\{closure}(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#33 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(374): PHPStan\\Node\\ClassStatementsGatherer->__invoke(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#34 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1754): PHPStan\\Analyser\\NodeScopeResolver::PHPStan\\Analyser\\{closure}(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#35 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1694): PHPStan\\Analyser\\NodeScopeResolver::PHPStan\\Analyser\\{closure}(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#36 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1118): PHPStan\\Analyser\\NodeScopeResolver->callNodeCallbackWithExpression(Object(Closure), Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(PHPStan\\Analyser\\ExpressionContext))
#37 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1609): PHPStan\\Analyser\\NodeScopeResolver->processExprNode(Object(PhpParser\\Node\\Expr\\StaticCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#38 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(391): PHPStan\\Analyser\\NodeScopeResolver->processExprNode(Object(PhpParser\\Node\\Expr\\Ternary), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#39 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(232): PHPStan\\Analyser\\NodeScopeResolver->processStmtNode(Object(PhpParser\\Node\\Stmt\\Return_), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#40 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1761): PHPStan\\Analyser\\NodeScopeResolver->processStmtNodes(Object(PhpParser\\Node\\Expr\\Closure), Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#41 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1908): PHPStan\\Analyser\\NodeScopeResolver->processClosureNode(Object(PhpParser\\Node\\Expr\\Closure), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext), Object(PHPStan\\Type\\CallableType))
#42 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1305): PHPStan\\Analyser\\NodeScopeResolver->processArgs(Object(PHPStan\\Reflection\\ResolvedMethodReflection), Object(PHPStan\\Reflection\\Generic\\ResolvedFunctionVariant), Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#43 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1287): PHPStan\\Analyser\\NodeScopeResolver->processExprNode(Object(PhpParser\\Node\\Expr\\MethodCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#44 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1133): PHPStan\\Analyser\\NodeScopeResolver->processExprNode(Object(PhpParser\\Node\\Expr\\MethodCall), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#45 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1939): PHPStan\\Analyser\\NodeScopeResolver->PHPStan\\Analyser\\{closure}(Object(NunoMaduro\\Larastan\\Analyser\\Scope))
#46 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(1140): PHPStan\\Analyser\\NodeScopeResolver->processAssignVar(Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(PhpParser\\Node\\Expr\\Variable), Object(PhpParser\\Node\\Expr\\MethodCall), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext), Object(Closure), true)
#47 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(409): PHPStan\\Analyser\\NodeScopeResolver->processExprNode(Object(PhpParser\\Node\\Expr\\Assign), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure), Object(PHPStan\\Analyser\\ExpressionContext))
#48 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(232): PHPStan\\Analyser\\NodeScopeResolver->processStmtNode(Object(PhpParser\\Node\\Stmt\\Expression), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#49 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(379): PHPStan\\Analyser\\NodeScopeResolver->processStmtNodes(Object(PhpParser\\Node\\Stmt\\ClassMethod), Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#50 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(232): PHPStan\\Analyser\\NodeScopeResolver->processStmtNode(Object(PhpParser\\Node\\Stmt\\ClassMethod), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(PHPStan\\Node\\ClassStatementsGatherer))
#51 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(458): PHPStan\\Analyser\\NodeScopeResolver->processStmtNodes(Object(PhpParser\\Node\\Stmt\\Class_), Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(PHPStan\\Node\\ClassStatementsGatherer))
#52 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(232): PHPStan\\Analyser\\NodeScopeResolver->processStmtNode(Object(PhpParser\\Node\\Stmt\\Class_), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#53 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(420): PHPStan\\Analyser\\NodeScopeResolver->processStmtNodes(Object(PhpParser\\Node\\Stmt\\Namespace_), Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#54 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/NodeScopeResolver.php(201): PHPStan\\Analyser\\NodeScopeResolver->processStmtNode(Object(PhpParser\\Node\\Stmt\\Namespace_), Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#55 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/FileAnalyser.php(150): PHPStan\\Analyser\\NodeScopeResolver->processNodes(Array, Object(NunoMaduro\\Larastan\\Analyser\\Scope), Object(Closure))
#56 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Analyser/Analyser.php(52): PHPStan\\Analyser\\FileAnalyser->analyseFile('/Users/matanyad...', Array, Object(PHPStan\\Rules\\Registry), NULL)
#57 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Command/AnalyserRunner.php(57): PHPStan\\Analyser\\Analyser->analyse(Array, Object(Closure), NULL, true, Array)
#58 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Command/AnalyseApplication.php(148): PHPStan\\Command\\AnalyserRunner->runAnalyser(Array, Array, Object(Closure), NULL, true, true, '/Users/matanyad...', NULL, NULL, Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput))
#59 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Command/AnalyseApplication.php(79): PHPStan\\Command\\AnalyseApplication->runAnalyser(Array, Array, true, '/Users/matanyad...', Object(PHPStan\\Command\\Symfony\\SymfonyOutput), Object(PHPStan\\Command\\Symfony\\SymfonyOutput), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput))
#60 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/src/Command/AnalyseCommand.php(148): PHPStan\\Command\\AnalyseApplication->analyse(Array, false, Object(PHPStan\\Command\\Symfony\\SymfonyOutput), Object(PHPStan\\Command\\Symfony\\SymfonyOutput), false, true, '/Users/matanyad...', Array, Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput))
#61 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/vendor/symfony/console/Command/Command.php(228): PHPStan\\Command\\AnalyseCommand->execute(Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Output\\ConsoleOutput))
#62 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/vendor/symfony/console/Application.php(856): _HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Command\\Command->run(Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Output\\ConsoleOutput))
#63 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/vendor/symfony/console/Application.php(237): _HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Application->doRunCommand(Object(PHPStan\\Command\\AnalyseCommand), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Output\\ConsoleOutput))
#64 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/vendor/symfony/console/Application.php(138): _HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Application->doRun(Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Input\\ArgvInput), Object(_HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Output\\ConsoleOutput))
#65 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/bin/phpstan(76): _HumbugBoxfb21822734fc\\Symfony\\Component\\Console\\Application->run()
#66 phar:///{project_path}/vendor/phpstan/phpstan/phpstan/bin/phpstan(77): _HumbugBoxfb21822734fc\\{closure}()
#67 /{project_path}/vendor/phpstan/phpstan/phpstan(6): require('phar:///Users/m...')
#68 {main}
"}
This might be related to my previous issue: https://github.com/nunomaduro/larastan/issues/709 (Caused because of the combination of grimzy/laravel-mysql-spatial's SpatialTrait and SoftDelete)
Larastan Version: 0.3.11
Really? :)
@szepeviktor Sorry, I meant v0.6.11
I want to correct myself: The issue isn't started on PHPStan v0.12.59, the issue started on Larastan v0.6.11.
Workaround: Remain using Larastan v0.6.10
@szepeviktor Any idea why it happens? It started only on v0.6.11, what in this release might cause this issue?
Previously this issue occurred because of using SoftDelete trait and laravel-mysql-spatial package. It got fixed in v0.6.10: https://github.com/nunomaduro/larastan/issues/709
These are the places the issue happens:
class Util
{
public static function notifyUsers($data)
{
return User::each(static function ($user) use ($data) {
$user->notify($data);
});
}
}
class BaseModel extends Model
{
public static function getTableName(): string
{
return (new static)->getTable();
}
}
// Laravel Nova migration (and every other migration file)
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActionEventsTable extends Migration
{
public function up(): void
{
Schema::create('action_events', function (Blueprint $table) {
$table->id();
$table->char('batch_id', 36);
$table->unsignedBigInteger('user_id')->index();
$table->string('name');
$table->string('actionable_type');
$table->unsignedBigInteger('actionable_id');
$table->string('target_type');
$table->unsignedBigInteger('target_id');
$table->string('model_type');
$table->unsignedBigInteger('model_id')->nullable();
$table->text('fields');
$table->string('status', 25)->default('running');
$table->text('exception');
$table->timestamps();
$table->index(['actionable_type', 'actionable_id']);
$table->index(['batch_id', 'model_type', 'model_id']);
});
}
public function down(): void
{
Schema::dropIfExists('action_events');
}
}
Larastan checks more and more things + we boot up Laravel.
@szepeviktor This should be fixed or this is the intended behavior? Larastan should access the DB?
It's currently intended. I guess the readme is outdated which says
It catches whole classes of bugs even before you write tests for the code.
and
Discovers bugs in your code without running it
It's partially true: it does not run your actual code to analyze it, but it has to boot the framework and looks into the database to figure out more stuff for the models, which otherwise isn't possible.
Hi,
Sorry for taking a long time to answer.
@MatanYadaev Your issue seems to be coming again from laravel-mysql-spatial package. They are overriding some database connection methods. And while the normal method does not access the database, the code in the package tries to establish a connection. Causing an unwanted side effect. And I think this should be solved in the package. But I will try to figure out if we can do something in Larastan.
Larastan should access the DB?
No, Larastan does not need to access the database for anything.
@mfn
looks into the database to figure out more stuff for the models, which otherwise isn't possible.
That is not true. Larastan does not need a database connection. Larastan gets all the information about model properties by scanning the migrations statically.
We boot up the framework because in some cases we need to resolve something out of the container to get the actual implementation. And as a side effect of this, if a service provider or some piece of code does something (accesses DB, makes an HTTP request etc.) this causes problems. But I'd say this is not related to Larastan. You should not be doing this kind of stuff in your boot methods or while framework is booting anyway.
Thanks for the correction!
However, I think it would be useful to mention that the frame is in fact booted, which is unexpected for a static analyzer IMHO.
Most helpful comment
Hi,
Sorry for taking a long time to answer.
@MatanYadaev Your issue seems to be coming again from
laravel-mysql-spatialpackage. They are overriding some database connection methods. And while the normal method does not access the database, the code in the package tries to establish a connection. Causing an unwanted side effect. And I think this should be solved in the package. But I will try to figure out if we can do something in Larastan.No, Larastan does not need to access the database for anything.
@mfn
That is not true. Larastan does not need a database connection. Larastan gets all the information about model properties by scanning the migrations statically.
We boot up the framework because in some cases we need to resolve something out of the container to get the actual implementation. And as a side effect of this, if a service provider or some piece of code does something (accesses DB, makes an HTTP request etc.) this causes problems. But I'd say this is not related to Larastan. You should not be doing this kind of stuff in your
bootmethods or while framework is booting anyway.