【问题标题】:FosUserBundle and doctrine requestFosUserBundle 和学说请求
【发布时间】:2012-08-16 14:27:57
【问题描述】:

当我执行这个查询时

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;

 }

我收到了这个错误:

[Semantical Error] line 0, col 110 near 'test': Error: 'test' is not defined.

但这一款效果很好:

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

}

【问题讨论】:

    标签: symfony doctrine-orm fosuserbundle


    【解决方案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 的 Doctrine 文档章节。

    【讨论】:

    • 感谢您的快速回答!但是在连接内或外写入似乎不是问题,因为我在其他请求中使用这种语法没有任何问题。问题是为什么这个语法“product.fournisseur.id”是正确的,而这个“product.fournisseur.username”不是。
    • 每个语法都应该是正确的。如果您需要更多帮助,请粘贴您的实体。
    猜你喜欢
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多