我有一个静态函数,其中我要从控制器传递一些变量,在该函数中,我正在执行一些数据库表联接和其他一些查询,我传递的值是从过滤器获取的,如果不是选择任何过滤器,我将获得空值。
public static function Myfunction($var1,$var2,$var3)
{
...some database queries..
->joinLeft(some conditions)
->joinLeft(some conditions)
->where('table1.val1 = ?',$var1)
->where('table2.val2 = ?', $var2)
->where('table3.val3 =?' ,$var3);
return $data
}
在这里,如果我传递的值是null,那么我不需要检查第一个条件,类似地,在第2和第3个情况下,如果值是null,那么我就不需要检查任何条件并且不必根据查询从数据库获取整个值,有人,请帮助我如何在Zend中做到这一点?
答案 0 :(得分:0)
在这种情况下,我使用php Closure封装条件检查,如下所示:
public static function Myfunction($var1,$var2,$var3)
{
return $this->tableGateway->select(function (Select $select) use ($var1, $var2, $var3) {
...some database queries..
$select->joinLeft(some conditions)
$select->joinLeft(some conditions);
if (!empty($var1)) {
$select->where('table1.val1 = ?',$var1);
}
if (!empty($var2)) {
$select->where('table2.val2 = ?', $var2);
}
if (!empty($var3)) {
$select->where('table3.val3 =?' ,$var3);
}
});
}