Как получить данные из многих во многие таблицы, без пользовательских запросов? - PullRequest
0 голосов
/ 07 января 2019

Хорошо, я создаю отношение ManyToMany, которое работает нормально, но когда я пытался получить данные, он возвращает мне пустой объект:

Как я пытался получить данные (Контроллер):

    $userRepo = $this->getDoctrine()->getRepository(User::class);
    $user = $this->getUser();
    $user = $userRepo->find($user->getId());
    $test = $user->getFavouriteArticles();
    dump($test); exit;

Пользователь:

<?php

namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 * @ORM\Table(name="user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /**
     * @ORM\Column(type="string")
     */
    private $firstName;

    /**
     * @var favouriteArticles[]
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Article")
     * @ORM\JoinTable(name="user_favourite_articles",
     *     joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *     inverseJoinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")})
     */
    private $favouriteArticles;

    public function __construct() {
        $this->favouriteArticles = new ArrayCollection();
    }

    /**
     * @return favouriteArticles[]
     */
    public function getFavouriteArticles(): object
    {
        return $this->favouriteArticles;
    }

    /**
     * @param favouriteArticles[] $favouriteArticles
     */
    public function setFavouriteArticles(array $favouriteArticles): void
    {
        $this->favouriteArticles = $favouriteArticles;
    }

    /**
     * Add user
     *
     * @param \AppBundle\Entity\Article $article
     *
     * @return User
     */
    public function addFavouriteArticle(Article $article)
    {
        $this->favouriteArticles[] = $article;

        return $this;
    }

Как добавить любимые статьи пользователя:

public function addToFavourites($category, $id)
{
    $em = $this->getDoctrine()->getManager();
    $article = $em->getRepository("AppBundle:Article")->find($id);
    $user = $this->getUser();
    $user = $em->getRepository("AppBundle:User")->find($user->getId());
    $user->addFavouriteArticle($article);
    $em->persist($user);
    $em->flush();

БД (таблица user_favourite_articles):

|user_id| article_id |
|____________________|
|    3  |      8     |
|    3  |      9     |

Ток user_id равен 3

Результат от дампа есть, и я не могу показать favouriteArticles:

PersistentCollection {#7796 ▼
  -snapshot: []
  -owner: User {#7563 ▼
    #id: 3
    -firstName: "test"
    -favouriteArticles: PersistentCollection {#7796}
    #username: "test@test.com"
    #usernameCanonical: "test@test.com"
    #email: "test@test.com"
    #emailCanonical: "test@test.com"
    #enabled: true
    #salt: null
    #password: "$2y$13$.8Ky5Jj71PUsGD9E04nre./xClPVZ/Uiia40PTQjGmMAqOFpW2mwi"
    #plainPassword: null
    #lastLogin: DateTime {#7559 ▶}
    #confirmationToken: null
    #passwordRequestedAt: null
    #groups: null
    #roles: []
  }
...