您能帮我了解如何正确执行此操作吗?
下面是我的默认 Controller 。
public function searchAction(){
$request = $this->getRequest();
$data = $request->request->get('search');
$data1 = $request->request->get('search1');
$data2 = $request->request->get('search2');
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
'SELECT p
FROM FooTransBundle:Trans p, FooTransBundle:Supplier d
WHERE p.transType LIKE :data
OR d.name LIKE :data1
OR p.sendDate LIKE :data2')
->setParameter('data',$data)
->setParameter('data1', $data1)
->setParameter('data2',$data2);
$res = $query->getResult();
return $this->render('FooTransBundle:Default:search.html.twig', array(
'res' => $res));
}
下面是我的 Twig 文件。
<form class="form-horizontal"role="form"name ="search"method="post" action="{{path('foo_trans_search') }}">
<div class="form-group">
<label for="agr"class="col-sm-2 control-label">Trans Type</label>
<div class="col-sm-10">
<input type="text"class="form-control"id="agr"placeholder="Trans Type" name ="search">
</div>
</div>
<div class="form-group">
<label for="trad"class="col-sm-2 control-label">Name:</label>
<div class="col-sm-10">
<input type="text"class="form-control"id="trad"placeholder="Name" name ="search1">
</div>
</div>
<div class="form-group">
<label for="send"class="col-sm-2 control-label">Send Date:</label>
<div class="col-sm-10">
<input type="text"class="form-control"id="send"placeholder="YYYY-MM-DD"name ="search2">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit"class="btn btn-primary">Submit</button>
<a class="btn btn-primary"href="{{ path('foo_trans_show_all')}}"role="button"target="iframe_loader">Cancel</a>
</div>
</div>
</form>
<table class="table table-condensed">
<tr class="active ">
<td>Supplier Name</td>
<td>Trans Type</td>
<td>Transaction Date</td>
</tr>
<tr class="info">
{% block content_header_more %}
{% for new in res %}
<td><a href="{{ path('foo_trans_show', {'id': new.transId }) }}">{{ new.getSupplier.name }}</a>
<td>{{new.transactionType}}</td>
<td>{{new.sendDate}}</td>
</tr>
{% endfor %}
{% endblock %}
</table>
你能帮我在代码中做一个 if 语句吗?我真正想要的是这样的东西。我有三个输入字段,如我的 Twig 文件中所示,我希望它仍然会根据输入的数据进行搜索。示例情况:
if($data != null && $data1 != null && $data2 != null){
//query that will search for the three values
}
然后它将查询与该单词匹配的 3 个数据。如果全部为空,它将返回“Nothing to search”的内容。而且即使用户只在两个输入字段中输入数据,它仍然可以达到目的。 if Again 的示例情况:
if($data == null && $data1 != null && $data2 != null){
//query here that will search the two values that are not null
}
请你帮帮我。任何想法??提前致谢。
最佳答案
你可以尝试这样的事情: - 创建repository class ; - 创建通过某些过滤条件获取记录的方法; - 从 Controller 操作调用存储库方法;这是一个简单示例:
Controller 操作:
public function testAction(Request $request)
{
$postParameters = $request->request->all();
$data = [];
$res = null;
foreach ($postParameters as $key => $value) {
if (!$value) {
continue;
}
$data[$key] = $value;
}
if (!empty($data)) {
$em = $this->getDoctrine()->getManager();
$res = $em->getRepository('FooTransBundle:Trans')->fetchByCriteria($data);
}
return $this->render('FooTransBundle:Default:search.html.twig', [
'res' => $res
]);
}
存储库方法:
public function fetchByCriteria(array $criteria)
{
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$query = $queryBuilder
->select(['p'])
->from('FooTransBundle:Trans', 'p')
->innerJoin('p.supplier', 'd') // from you code it's not so clear how are you trying to select from tables, that's why i am joining them, just for example.
;
$parameters = [];
foreach ($criteria as $key => $value) {
if ($key == 'search') {
$query->andWhere($queryBuilder->expr()->like('p.transType', ':data'));
$parameters['data'] = '%' . $value . '%';
}
if ($key == 'search1') {
$query->andWhere($queryBuilder->expr()->like('d.name', ':data1'));
$parameters['data1'] = '%' . $value . '%';
}
if ($key == 'search2') {
$query->andWhere($queryBuilder->expr()->like('p.sendDate', ':data2'));
$parameters['data2'] = '%' . $value . '%';
}
}
$query->setParameters($parameters);
return $query->getQuery()->getResult();
}
Twig :
{% if res is not null %}
-- CODE --
{% else %}
No result!
{% endif %}
关于php - 如何在 Controller 中正确执行 symfony2 中的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24924354/