od niedawna uczę się symfony2 i natrafiłem na problem przy próbie stworzenia zapytania z join w doctrine2. Wydaje mi się że zrobiłem wszystko tak jak w dokumentacji, ale najprawdopodobniej tak nie jest ;/.
Tutaj jest model User.php
<?php namespace Acme\FootballBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Acme\FootballBundle\Entity\User * * @ORM\Table(name="User") * @ORM\Entity(repositoryClass="Acme\FootballBundle\Repository\UserRepository") */ class User { /** * @var integer $userId * * @ORM\Column(name="user_id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $userId; /** * @var string $userName * * @ORM\Column(name="user_name", type="string", length=50, nullable=false) */ private $userName; /** * @var string $userLevel * * @ORM\Column(name="user_level", type="string", length=20, nullable=false) */ private $userLevel; /** * @var string $userPass * * @ORM\Column(name="user_pass", type="string", length=32, nullable=false) */ private $userPass; /** * @ORM\OneToMany(targetEntity="Advert", mappedBy="User") */ protected $Advert; /** * Get userId * * @return integer */ public function getUserId() { return $this->userId; } public function __construct() { $this->Advert = new \Doctrine\Common\Collections\ArrayCollection(); } }
Oraz advert
<?php namespace Acme\FootballBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Acme\FootballBundle\Entity\Advert * * @ORM\Table(name="Advert") * @ORM\Entity(repositoryClass="Acme\FootballBundle\Repository\AdvertRepository") */ class Advert { /** * @var integer $advertId * * @ORM\Column(name="advert_id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $advertId; /** * @var string $advertTitle * * @ORM\Column(name="advert_title", type="string", length=50, nullable=false) */ private $advertTitle; /** * @var text $advertContent * * @ORM\Column(name="advert_content", type="text", nullable=false) */ private $advertContent; /** * @var datetime $advertCreatedDate * * @ORM\Column(name="advert_created_date", type="datetime", nullable=false) */ private $advertCreatedDate; /** * @ORM\ManyToOne(targetEntity="User", inversedBy="Advert") * @ORM\JoinColumn(name="userId", referencedColumnName="user") */ private $user; }
Metody set oraz get pominąłem.
Moje zapytanie stworzone w UserRepository
$this->getEntityManager() ->createQuery('SELECT p FROM AcmeFootballBundle:User p JOIN p.Advert a WHERE p.userId = a.user') ->getResult();
Komunikat :
Notice: Undefined index: User in .../vendor/doctrine/lib/Doctrine/ORM/Query/SqlWalker.php line 751
Tabela user ma klucz głowny user.user.id, natomiast tabela advert ma klucz obcy advert.user_id. Mniemam że coś źle zrobiłem w adnotacji przy relacjach ale nie mogę doszukać się błędu.