phpstan-doctrine
phpstan-doctrine copied to clipboard
Error in TablePrefixSubscriber doctrine/orm v2.13.1
Package versions:
doctrine/orm 2.13.1
phpstan/phpstan 1.8.2
phpstan/phpstan-deprecation-rules 1.0.0
phpstan/phpstan-doctrine 1.3.12
phpstan/phpstan-nette 1.0.0
phpstan/phpstan-strict-rules 1.3.0
version doctrine/orm 2.12.3
was OK.
I write code like this https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/cookbook/sql-table-prefixes.html#sql-table-prefixes .
Code:
<?php declare(strict_types = 1);
namespace App\Model;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
use Doctrine\ORM\Mapping\ClassMetadata;
final class TablePrefixSubscriber implements EventSubscriber
{
public function __construct(public string $prefix)
{
}
/**
* @return array<string>
*/
public function getSubscribedEvents(): array
{
return ['loadClassMetadata'];
}
public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs): void
{
$classMetadata = $eventArgs->getClassMetadata();
if (!$classMetadata->isInheritanceTypeSingleTable() || $classMetadata->getName() === $classMetadata->rootEntityName) {
$classMetadata->setPrimaryTable([
'name' => $this->prefix . $classMetadata->getTableName()
]);
}
foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
if ($mapping['type'] == ClassMetadata::MANY_TO_MANY && $mapping['isOwningSide']) {
$mappedTableName = $mapping['joinTable']['name']; //here is reported error by PHPStan
$classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
}
}
}
}
Error:
------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Line app/Model/TablePrefixSubscriber.php
------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
36 Offset 'joinTable' does not exist on array{cache?: array, cascade: array<string>, declared?: class-string, fetch: mixed, fieldName: string, id?: bool, inherited?: class-string,
indexBy?: string, ...}.
------ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------