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 列目 'test' 付近: エラー: 'test' が定義されていません。

しかし、これは完全に機能します:

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;
}

を扱っているDoctrineのドキュメントの章を読むことをお勧めしますQueryBuilder

于 2012-08-16T14:36:54.360 に答える