当我执行此查询时
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
的教义文档章节。