phperror-handlingsymfony4

Visual Studio Code PHP Intelephense gets errors which aren't


I'm working on a Symfony 4 project using Visual Studio Code with Intelephense.

Intelephense gets errors which aren't. There are some examples:

Undefined method 'uasort'.

This error corresponding to this code:

// Collection creation of seasons used in the periods 
$seasons = new ArrayCollection();
$sortedSeasons = new ArrayCollection();
    
//Search seasons used by periods
foreach ($advert->getPeriods() as $period) 
{
    $season = $period->getSeason();
    if (! $seasons->contains($season)) 
    {
        $seasons->add($season);
    }
}
    
// Sort seasons by ascending cost 
$iterator = $seasons->getIterator();
$iterator->uasort(function ($a, $b) {
    return $a->getCost() <=> $b->getCost();
});

An other example:

Undefined method 'getAdvertMinPrice'.

$minPrices = $this->getDoctrine()->getRepository(Price::class)->getAdvertMinPrice($advert);

However, the method exists in the PriceRepository:

<?php
namespace App\Repository\advert;

use App\Entity\advert\Price;
use Symfony\Bridge\Doctrine\RegistryInterface;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
    
/**
 * @method Price|null find($id, $lockMode = null, $lockVersion = null)
 * @method Price|null findOneBy(array $criteria, array $orderBy = null)
 * @method Price[]    findAll()
 * @method Price[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class PriceRepository extends ServiceEntityRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Price::class);
    }
    
   /**
    * Get the minimum price from an advert
    *
    * @param [type] $advert
    * @return Price[]
    */ 
    public function getAdvertMinPrice($advert): array
    {
        return $this->createQueryBuilder('p')
            ->andWhere('p.price = (
                            SELECT MIN(p2.price)
                            FROM ' . $this->_entityName . ' p2
                            WHERE p2.advert = :val
                        )'
                       )
            ->setParameter('val', $advert)
            ->getQuery()
            ->getResult()
            ;
        }
    }

There is the Price name space:

<?php

namespace App\Entity\advert;

use App\Entity\advert\Advert;
use App\Entity\advert\Period;
use App\Entity\backend\Season;
use App\Entity\backend\Duration;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity(repositoryClass="App\Repository\advert\PriceRepository")
 * 
 * @UniqueEntity(
 *     fields={"duration", "season"},
 *     message="A price already exists for this season and this duration."
 * )
 */
class Price
{

And the use command in the file where I have the problem:

<?php

namespace App\Controller\advert;

use App\Entity\backend\VAT;
use App\Entity\advert\Price;

I don't understand where is the problem. I have searched for days without result.

Somebody would have an idea about this problem origin?


Solution

  • Solved by uninstalling and reinstalling Visual Studio Code extensions.