1

当我执行这个查询

public function SearchByfournisseur($keyWord)
{
           $qb = $this->createQueryBuilder('p')->distinct()->select('p');  
           $qb ->leftJoin('p.Fournisseur', 'f'); 
                   $qb ->where($qb->expr()->eq('f.username', $keyWord)); 
                   $query = $qb->getQuery();      
           $products = $query->getResult();  
           return $products;

 }

我收到了这个错误:

[语义错误] 第 0 行,“测试”附近的第 110 列:错误:“测试”未定义。

但这一个完美地工作:

public function SearchByfournisseur($keyWord)
{
           $qb = $this->createQueryBuilder('p')->distinct()->select('p');  
           $qb ->leftJoin('p.Fournisseur', 'f'); 
                   $qb ->where($qb->expr()->eq('f.id', $keyWord)); 
                   $query = $qb->getQuery();      
           $products = $query->getResult();  
           return $products;
 }

这意味着我无法访问用户的属性,除了他的id.

有没有办法解决这个问题?

编辑:这是有关实体:

    <?php
namespace Ecommerce\boutiqueBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use FS\SolrBundle\Doctrine\Annotation as Solr;

/**
 * Ecommerce\boutiqueBundle\Entity\Produit
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="Ecommerce\boutiqueBundle\Entity\ProduitRepository")
 */


 class Produit
{

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

     /**
     * @ORM\ManyToOne(targetEntity="Ecommerce\UserBundle\Entity\User",inversedBy="Produits")
     *
     * @ORM\JoinColumn(name="Fournisseur_id", referencedColumnName="id")
     */
    private $Fournisseur;

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



    /**
     * Set Fournisseur
     *
     * @param string $Fournisseur
     */
   public function setFournisseur( $Fournisseur)
    {
        $this->Fournisseur = $Fournisseur;
    } 

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

Fournisseur 实体:

<?php
namespace Ecommerce\UserBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="Ecommerce_user")
*/
class User extends BaseUser
{
    public function __construct()
        {
        parent::__construct();
        $this->Produits = new \Doctrine\Common\Collections\ArrayCollection();

        }

    /**
    * @ORM\Id
    * @ORM\Column(type="integer")
    * @ORM\GeneratedValue(strategy="AUTO")
    */
    protected $id;

     /**
    * @ORM\OneToMany(targetEntity="Ecommerce\boutiqueBundle\Entity\Produit",
    * mappedBy="Fournisseur")
    */
    protected $Produits;


    public function addProduit(\Ecommerce\boutiqueBundle\Entity\Produit $Produit)
    {
    $this->Produits[] = $Produit;
    $Produit->setCategorie($this);
    }

    public function getProduits()
    {
        return $this->Produits;
    }

}
4

1 回答 1

1

您必须在leftJoin()通话中指定加入条件。

public function SearchByfournisseur($keyWord)
{
    $qb = $this->createQueryBuilder('p')->distinct()->select('p');  
    $qb ->leftJoin('p.Fournisseur', 'f', 'WITH', $qb->expr()->eq('f.username = ?', $keyWord));   
    $products = $query->getResult();  
    return $products;
}

我建议您阅读有关QueryBuilder.

于 2012-08-16T14:36:54.360 回答