Я сделал пользовательский запрос с DQL, и объект не видит этот метод - PullRequest
0 голосов
/ 16 мая 2018

Когда я изучал Symfony, у меня возникла проблема с пользовательским запросом в DQL, там была ссылка на документ: https://symfony.com/doc/current/doctrine.html#querying-with-dql-or-sql Я сделал такую ​​же функцию, как эта:

<?php

namespace App\Repository;

use App\Entity\CatPost;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\RegistryInterface;

/**
 * @method CatPost|null find($id, $lockMode = null, $lockVersion = null)
 * @method CatPost|null findOneBy(array $criteria, array $orderBy = null)
 * @method CatPost[]    findAll()
 * @method CatPost[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class CatPostRepository extends ServiceEntityRepository
{
    public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, CatPost::class);
    }

    public function findAllCategoriesConnectedToPost($id) :array
    {
        $entityManager = $this->getEntityManager();

        $query = $entityManager->createQuery(
            'SELECT cat.id_cat 
             FROM App\Entity\CatPost cat 
             WHERE cat.id_post = :idPost'
        );
        $query->setParameter('idPost', $id);

        return $query->execute();
    }
}

Класс сущности:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CatPostRepository")
 */
class CatPost
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $id_post;

    /**
     * @ORM\Column(type="integer")
     */
    private $id_cat;

    public function getId()
    {
        return $this->id;
    }

    public function getIdPost(): ?int
    {
        return $this->id_post;
    }

    public function setIdPost(int $id_post): self
    {
        $this->id_post = $id_post;

        return $this;
    }

    public function getIdCat(): ?int
    {
        return $this->id_cat;
    }

    public function setIdCat(int $id_cat): self
    {
        $this->id_cat = $id_cat;

        return $this;
    }
}

И затем я хочу использовать его в своем контроллере следующим образом:

/App/Controller/ArticleController

$categories = $this->getDoctrine()
->getRepository(CatPost::class)
->findAllCategoriesConnectedToPost($id);

var_dump($categories);
die();

В результате я получил пустой массив, и PhpStorm говорит мне, что "Метод не найден "У вас есть идеи, как это исправить?

1 Ответ

0 голосов
/ 16 мая 2018

Обязательно ли указали ссылку на свой репозиторий в вашей организации?

/**
* CatPost
*
* @ORM\Entity(repositoryClass="App\Repository\CatPostRepository")
*/
class CatPost

Вы можете увидеть это на той же странице документа дальше - https://symfony.com/doc/current/doctrine.html#creating-an-entity-class

...