2016-05-18 23 views
0

商品の数量が1の場合は、インデックスページに商品を表示しません。商品の数量は表の数量に格納されます。テーブル数量は商品へのリンクです(ManyToOne)。Doctrine Query Builderを使用して結合クエリを実行する

これは私が行ったことです。

public function product($id) 
    { 
     $query = $this->createQueryBuilder('e') 
      ->leftJoin('e.quantity', 'r') 
      ->where('r.quantity = :id') 
      ->setParameter('id', $id) 
      ->getQuery(); 

     return $query->getResult(); 
    } 

数量

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

    /** 
    * @ORM\ManyToOne(targetEntity="Post", cascade={"remove"}) 
    * @ORM\JoinColumn(name="product_id", referencedColumnName="id") 
    */ 
    protected $desk2; 

    /** 
    * @var integer 
    * @ORM\Column(name="quantity", type="integer", nullable=true) 
    */ 
    protected $quantity; 

商品

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

private $id; 
/** 
* @var string 
* 
* @ORM\Column(name="telephone", type="string", length=30) 
*/ 
private $telephone; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=125) 
*/ 
private $name; 

/** 
* @var string 
* 
* @ORM\Column(name="description", type="text" , length=125) 
*/ 
private $description; 

インデックス

EDIT:

デフォルト:index.html.twig

{% extends "::base.html.twig" %} 
     {% block newadvert %} 
       <div class="span4 offset1"> 
       </div> 
       {{ render(controller('FLYBookingsBundle:Post:indexv')) }} 
     {% endblock newadvert %} 

コントローラ:これは量> 1(または任意の量の製品を返され

public function indexAction() 
    { 

    return $this->render('FLYPlatformBundle:Default:index.html.twig'); 


    } 

答えて

2

あなたが渡すパラメータ)。

public function product($quantityLimit) 
    { 
     $query = $this->createQueryBuilder('e') 
      ->join('e.quantity', 'r') 
      ->addSelect('r') 
      ->where('r.quantity > :quantityLimit') 
      ->setParameter('quantityLimit', $quantityLimit) 
      ->getQuery(); 

     return $query->getResult(); 
    } 

あなたはすべての製品を返却したかったが、彼らはあなたがそうのようなleftJoinを使用する> 1のみの数量場合。

public function product($quantityLimit) 
    { 
     $query = $this->createQueryBuilder('e') 
      ->leftJoin('e.quantity', 'r', 'WITH', 'r.quantity > :quantityLimit') 
      ->addSelect('r') 
      ->setParameter('quantityLimit', $quantityLimit) 
      ->getQuery(); 

     return $query->getResult(); 
    } 
+0

ありがとうございます。私はあなたが提案したものを試しましたが、私はこのエラーがあります: 'テンプレートのレンダリング中に例外がスローされました("コントローラー "FLY \ BookingsBundle \ Controller \ PostController :: indexvAction()"は、 $ quantityLimit "(デフォルト値がないため、またはオプションの後にオプションの引数がないため)。")in FLYPlatformBundle:デフォルト:index.html.twig at 5行目。 index.html.twig – Sirius

+0

quantityLimitパラメータをindexvActionに渡す必要があります。クエリに問題はありません。経路を呼び出す方法だけです。 http://symfony.com/doc/current/book/routing.html#routing-with-placeholdersを参照して、コントローラメソッドを正しく呼び出していることを確認してください。例えば。 http://yoursite.com/yourproductroute/1 - またはそのようなもの – Richard

+0

私はindexvActionに既にquantityLimitパラメータを渡しています。ページindexv.html.twigは、index.html.twigページに表示されます。そして、私は問題がこの行から来ていると思います: '{{render(controller)} ');}}' – Sirius

関連する問題