Php 语义错误行0,列140靠近';Q内部联接';:错误:类搜索\serachBundle\Entity\Person没有名为Qualification的关联

Php 语义错误行0,列140靠近';Q内部联接';:错误:类搜索\serachBundle\Entity\Person没有名为Qualification的关联,php,symfony,doctrine,Php,Symfony,Doctrine,这个代码有什么问题 我想创建具有多重联接的查询,但不幸的是显示了此错误 [这是我的SearchController] class SearchController extends Controller { public function indexAction() { $em = $this->get('doctrine.orm.entity_manager'); $users = $em ->createQueryBuilder('P')

这个代码有什么问题

我想创建具有多重联接的查询,但不幸的是显示了此错误

[这是我的SearchController]

class SearchController extends Controller {

public function indexAction() {
    $em = $this->get('doctrine.orm.entity_manager');
    $users = $em 
            ->createQueryBuilder('P')
            ->select('P.pname, Q.qname,P.gender,P.phone,P.yearsOfExperience,P.graduationYear,c.cname')
            ->add('from', 'serachBundle:Person P')
            ->Join('P.Qualification', 'Q')
            ->Join('Q.Category', 'c')
            ->where('P.qualificationId=Q.id')
            ->andwhere('Q.categoryId=c.id')
            ->getQuery();
    $user = $users->getResult();

    print_r($user);
    //qualification
    $Qlist = $this->getDoctrine()
            ->getRepository('serachBundle:qualification')
            ->findAll();
    //category
    $Catlist = $this->getDoctrine()
            ->getRepository('serachBundle:category')
            ->findAll();

    return $this->render('serachBundle:Default:Search.html.twig', array('user' => $user, 'Qlist' => $Qlist, 'Catlist' => $Catlist));
}
这是我的个人实体

 <?php

namespace Search\serachBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Person
 *
 * @ORM\Table(name="person", indexes={@ORM\Index(name="companyId", columns={"companyId", "qualificationId"}), @ORM\Index(name="qualificationId", columns={"qualificationId"}), @ORM\Index(name="IDX_34DCD1762480E723", columns={"companyId"})})
 * @ORM\Entity
 */
class Person
{
    /**
     * @var string
     *
     * @ORM\Column(name="pname", type="string", length=255, nullable=false)
     */
    private $pname;

    /**
     * @var string
     *
     * @ORM\Column(name="address", type="string", length=255, nullable=false)
     */
    private $address;

    /**
     * @var string
     *
     * @ORM\Column(name="phone", type="string", length=255, nullable=false)
     */
    private $phone;

    /**
     * @var string
     *
     * @ORM\Column(name="gender", type="string", length=255, nullable=false)
     */
    private $gender;

    /**
     * @var integer
     *
     * @ORM\Column(name="yearsOfExperience", type="integer", nullable=false)
     */
    private $yearsofexperience;

    /**
     * @var integer
     *
     * @ORM\Column(name="graduationYear", type="integer", nullable=false)
     */
    private $graduationyear;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var \Search\serachBundle\Entity\Company
     *
     * @ORM\ManyToOne(targetEntity="Search\serachBundle\Entity\Company")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="companyId", referencedColumnName="id")
     * })
     */
    private $companyid;

    /**
     * @var \Search\serachBundle\Entity\Qualification
     *
     * @ORM\ManyToOne(targetEntity="Search\serachBundle\Entity\Qualification")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="qualificationId", referencedColumnName="id")
     * })
     */
    private $qualificationid;



    /**
     * Set pname
     *
     * @param string $pname
     * @return Person
     */
    public function setPname($pname)
    {
        $this->pname = $pname;

        return $this;
    }

    /**
     * Get pname
     *
     * @return string 
     */
    public function getPname()
    {
        return $this->pname;
    }

    /**
     * Set address
     *
     * @param string $address
     * @return Person
     */
    public function setAddress($address)
    {
        $this->address = $address;

        return $this;
    }

    /**
     * Get address
     *
     * @return string 
     */
    public function getAddress()
    {
        return $this->address;
    }

    /**
     * Set phone
     *
     * @param string $phone
     * @return Person
     */
    public function setPhone($phone)
    {
        $this->phone = $phone;

        return $this;
    }

    /**
     * Get phone
     *
     * @return string 
     */
    public function getPhone()
    {
        return $this->phone;
    }

    /**
     * Set gender
     *
     * @param string $gender
     * @return Person
     */
    public function setGender($gender)
    {
        $this->gender = $gender;

        return $this;
    }

    /**
     * Get gender
     *
     * @return string 
     */
    public function getGender()
    {
        return $this->gender;
    }

    /**
     * Set yearsofexperience
     *
     * @param integer $yearsofexperience
     * @return Person
     */
    public function setYearsofexperience($yearsofexperience)
    {
        $this->yearsofexperience = $yearsofexperience;

        return $this;
    }

    /**
     * Get yearsofexperience
     *
     * @return integer 
     */
    public function getYearsofexperience()
    {
        return $this->yearsofexperience;
    }

    /**
     * Set graduationyear
     *
     * @param integer $graduationyear
     * @return Person
     */
    public function setGraduationyear($graduationyear)
    {
        $this->graduationyear = $graduationyear;

        return $this;
    }

    /**
     * Get graduationyear
     *
     * @return integer 
     */
    public function getGraduationyear()
    {
        return $this->graduationyear;
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set companyid
     *
     * @param \Search\serachBundle\Entity\Company $companyid
     * @return Person
     */
    public function setCompanyid(\Search\serachBundle\Entity\Company $companyid = null)
    {
        $this->companyid = $companyid;

        return $this;
    }

    /**
     * Get companyid
     *
     * @return \Search\serachBundle\Entity\Company 
     */
    public function getCompanyid()
    {
        return $this->companyid;
    }

    /**
     * Set qualificationid
     *
     * @param \Search\serachBundle\Entity\Qualification $qualificationid
     * @return Person
     */
    public function setQualificationid(\Search\serachBundle\Entity\Qualification $qualificationid = null)
    {
        $this->qualificationid = $qualificationid;

        return $this;
    }

    /**
     * Get qualificationid
     *
     * @return \Search\serachBundle\Entity\Qualification 
     */
    public function getQualificationid()
    {
        return $this->qualificationid;
    }
}

您将这些关系命名为$qualificationid,因此您应该将查询设置为如下所示:

->Join('P.qualificationid', 'Q')
->Join('Q.categoryid', 'c')

记住在存储库类中进行所有查询。请尝试将您的捆绑包从serach重命名为search:-D

您将关系命名为$qualificationid,因此您的查询应如下所示:

->Join('P.qualificationid', 'Q')
->Join('Q.categoryid', 'c')
记住在存储库类中进行所有查询。请尝试将您的包从serach重命名为search:-D