FosUserBundle和学说请求



当我执行此查询时

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 EcommerceboutiqueBundleEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
use FSSolrBundleDoctrineAnnotation as Solr;
/**
 * EcommerceboutiqueBundleEntityProduit
 *
 * @ORMTable()
 * @ORMEntity(repositoryClass="EcommerceboutiqueBundleEntityProduitRepository")
 */

 class Produit
{
    /**
     * @var integer $id
     *@SolrId
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    private $id;
     /**
     * @ORMManyToOne(targetEntity="EcommerceUserBundleEntityUser",inversedBy="Produits")
     *
     * @ORMJoinColumn(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 entity:

<?php
namespace EcommerceUserBundleEntity;
use FOSUserBundleEntityUser as BaseUser;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity
* @ORMTable(name="Ecommerce_user")
*/
class User extends BaseUser
{
    public function __construct()
        {
        parent::__construct();
        $this->Produits = new DoctrineCommonCollectionsArrayCollection();
        }
    /**
    * @ORMId
    * @ORMColumn(type="integer")
    * @ORMGeneratedValue(strategy="AUTO")
    */
    protected $id;
     /**
    * @ORMOneToMany(targetEntity="EcommerceboutiqueBundleEntityProduit",
    * mappedBy="Fournisseur")
    */
    protected $Produits;

    public function addProduit(EcommerceboutiqueBundleEntityProduit $Produit)
    {
    $this->Produits[] = $Produit;
    $Produit->setCategorie($this);
    }
    public function getProduits()
    {
        return $this->Produits;
    }
}

您必须在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的教义文档章节。

相关内容

  • 没有找到相关文章

最新更新