方法 returns 无数据
Method returns no data
我正在尝试将产品列表从一个表单发送到另一个视图。在查询数据库时,我可以获得结果,但我使用的方法并非如此。
这是生成表单视图的方法:
public function battleAction() {
$categories = $this->forward('ProductBundle:Product:categorie');
return $this->render('ProductBundle:Product:battle.html.twig',
array('categories' => $categories)); }
这是验证表单操作并获取结果的方法:
public function battleRetailersAction(Request $request) {
$retailer = $request->get('retailer');
$retaile = $request->get('retaile');
$category = $request->get('category');
$subcategory = $request->get('subcategory');
$em = $this->getDoctrine()->getManager();
$RAW_QUERY = 'SELECT * FROM produit_revendeur pr,produit p, revendeur r , subcat s , categorie c WHERE r.nom IN("'.$retailer.'","'.$retaile.'")
and c.nom like "'.$category.'" and s.nom like "'.$subcategory.'" and pr.produit_id = p.id
AND r.id = pr.revendeur_id
and s.categorie_id = c.id ;';
$statement = $em->getConnection()->prepare($RAW_QUERY);
$statement->execute();
$products= $statement->fetchAll();
var_dump($products);
$categories = $this->forward('ProductBundle:Product:categorie');
return $this->render('ProductBundle:Product:battles.html.twig', array('categories' => $categories,'products'=>$products));
}
这是我的表格(基本):
<form method="post" action="{{url('battleretailers')}}" >
Retailer 1: <input type="text" id="retailer" name="retailer1"><br>
Retailer 2: <input type="text" id="retaile" name="retailer2"><br>
Category : <input type="text" id="category" name="category"><br>
Subcategory: <input type="text" id="subcategory" name="subcategory"><br>
<input type="submit">
</form>
这是查询结果的视图:
<h1>liste des produits <h1>
<table border =1>
<tr>
<th>Nom </th>
</tr>
{% for p in products %}
<tr>
<td> {{p.nom}} </td>
</tr>
{% endfor %}
</table>
您需要根据用户的输入重新构建 SQL
,例如
$sql = 'SELECT * FROM produit_revendeur pr,produit p, revendeur r , subcat s , categorie c WHERE pr.produit_id = p.id';
if (trim($retailer) != '' || trim($retaile) != '') {
$sql .= ' AND r.nom IN (';
if (trim($retailer) != '') $sql .= '?';
if (trim($retailer) != '' && trim($retaile) != '') $sql .= ',';
if (trim($retaile) != '') $sql .= '?';
$sql .= ')';
}
if (trim($category) != '') $sql .= ' AND c.nom LIKE ?';
if (trim($subcategory) != '') $sql .= ' AND s.nom LIKE ?';
$parms = [];
if (trim($retailer) != '') $parms[] = $retailer;
if (trim($retaile) != '') $parms[] = $retaile;
if (trim($category) != '') $parms[] = '%'.$category.'%';
if (trim($subcategory) != '') $parms[] = '%'.$subcategory.'%';
$statement = $em->getConnection()->prepare($sql);
$statement->execute($parms);
我正在尝试将产品列表从一个表单发送到另一个视图。在查询数据库时,我可以获得结果,但我使用的方法并非如此。
这是生成表单视图的方法:
public function battleAction() {
$categories = $this->forward('ProductBundle:Product:categorie');
return $this->render('ProductBundle:Product:battle.html.twig',
array('categories' => $categories)); }
这是验证表单操作并获取结果的方法:
public function battleRetailersAction(Request $request) {
$retailer = $request->get('retailer');
$retaile = $request->get('retaile');
$category = $request->get('category');
$subcategory = $request->get('subcategory');
$em = $this->getDoctrine()->getManager();
$RAW_QUERY = 'SELECT * FROM produit_revendeur pr,produit p, revendeur r , subcat s , categorie c WHERE r.nom IN("'.$retailer.'","'.$retaile.'")
and c.nom like "'.$category.'" and s.nom like "'.$subcategory.'" and pr.produit_id = p.id
AND r.id = pr.revendeur_id
and s.categorie_id = c.id ;';
$statement = $em->getConnection()->prepare($RAW_QUERY);
$statement->execute();
$products= $statement->fetchAll();
var_dump($products);
$categories = $this->forward('ProductBundle:Product:categorie');
return $this->render('ProductBundle:Product:battles.html.twig', array('categories' => $categories,'products'=>$products));
}
这是我的表格(基本):
<form method="post" action="{{url('battleretailers')}}" >
Retailer 1: <input type="text" id="retailer" name="retailer1"><br>
Retailer 2: <input type="text" id="retaile" name="retailer2"><br>
Category : <input type="text" id="category" name="category"><br>
Subcategory: <input type="text" id="subcategory" name="subcategory"><br>
<input type="submit">
</form>
这是查询结果的视图:
<h1>liste des produits <h1>
<table border =1>
<tr>
<th>Nom </th>
</tr>
{% for p in products %}
<tr>
<td> {{p.nom}} </td>
</tr>
{% endfor %}
</table>
您需要根据用户的输入重新构建 SQL
,例如
$sql = 'SELECT * FROM produit_revendeur pr,produit p, revendeur r , subcat s , categorie c WHERE pr.produit_id = p.id';
if (trim($retailer) != '' || trim($retaile) != '') {
$sql .= ' AND r.nom IN (';
if (trim($retailer) != '') $sql .= '?';
if (trim($retailer) != '' && trim($retaile) != '') $sql .= ',';
if (trim($retaile) != '') $sql .= '?';
$sql .= ')';
}
if (trim($category) != '') $sql .= ' AND c.nom LIKE ?';
if (trim($subcategory) != '') $sql .= ' AND s.nom LIKE ?';
$parms = [];
if (trim($retailer) != '') $parms[] = $retailer;
if (trim($retaile) != '') $parms[] = $retaile;
if (trim($category) != '') $parms[] = '%'.$category.'%';
if (trim($subcategory) != '') $parms[] = '%'.$subcategory.'%';
$statement = $em->getConnection()->prepare($sql);
$statement->execute($parms);