如何在cakePHP 1.2中组合查询代码
我的控制器中有这部分代码:如何在cakePHP 1.2中组合查询代码,php,cakephp,optimization,cakephp-1.2,Php,Cakephp,Optimization,Cakephp 1.2,我的控制器中有这部分代码: if ((!empty($params))&&(isset($params['autore'])||isset($params['titolo'])||isset($params['editore'])||isset($params['anno']))) { $a = $params['autore']; if (strpos($a,' ')||strpos($a,',')) { $autore_diviso =
if ((!empty($params))&&(isset($params['autore'])||isset($params['titolo'])||isset($params['editore'])||isset($params['anno']))) {
$a = $params['autore'];
if (strpos($a,' ')||strpos($a,',')) {
$autore_diviso = explode(" ", $a);
$this->set('autore_diviso', $autore_diviso);
}
$t = $params['titolo'];
$e = $params['editore'];
$an = $params['anno'];
$an2 = $params['anno2'];
if ($an==''&&$an2=='')
$conditions = array('AND' => array('autori LIKE' => "%$a%",
'editore LIKE' => "%$e%",'titolo LIKE' => "%$t%"));
else
{
if ($an=='')
$conditions = array(array('AND' => array('autori LIKE' => "%$a%",
'editore LIKE' => "%$e%",'titolo LIKE' => "%$t%")),
'AND' => array('anno <=' => "$an2"));
if ($an2=='')
$conditions = array(array('AND' => array('autori LIKE' => "%$a%", 'editore LIKE' => "%$e%",'titolo LIKE' => "%$t%")), 'AND' => array('anno >=' => "$an"));
else
$conditions = array('AND' => array(
'autori LIKE' => "%$a%", 'editore LIKE' => "%$e%",
'titolo LIKE' => "%$t%"),
'OR' => array('anno BETWEEN ? AND ?' => array($an,$an2)));
}
$u = $this->paginate('CdBiblio',$conditions);
$this->set('query', $u);
}
if(!empty($params))&&(isset($params['autore'])| | isset($params['titolo'])| | isset($params['editore'])| | isset($params['anno'])){
$a=$params['autore'];
if(strpos($a,,)| | strpos($a,,')){
$autore_diviso=爆炸(“,$a”);
$this->set('autore_diviso',$autore_diviso);
}
$t=$params['titolo'];
$e=$params['editore'];
$an=$params['anno'];
$an2=$params['anno2'];
如果($an=''&&$an2='')
$conditions=array('AND'=>array('autori LIKE'=>“%$a%”),
“编辑类”=>“%$e%”,“标题类”=>“%$t%”);
其他的
{
如果($an='')
$conditions=array(数组('AND'=>array('autori-LIKE'=>“%$a%”),
'编辑类'=>“%$e%”,'标题类'=>“%$t%”),
'和'=>数组('anno='=>“$an”);
其他的
$conditions=array('AND'=>array(
'autori LIKE'=>“%$a%”,'editore LIKE'=>“%$e%”,
'标题类似'=>“%$t%”,
'或'=>array('anno-BETWEEN?和?'=>array($an,$an2));
}
$u=$this->paginate('CdBiblio',$conditions);
$this->set('query',$u);
}
(其中“anno”表示“year”-titolo='title'和editore='publisher')。
如何简化此代码
此外,我还需要为用户提供搜索两位作者的可能性(因此我会添加更多if…else语句)。似乎在所有条件下都有相同的子查询 可以通过以下方式使用串联来保存代码:
//common subquery
$conditions = array('AND' => array(
'autori LIKE' => "%$a%", 'editore LIKE' => "%$e%",
'titolo LIKE' => "%$t%"));
//for example...
if(...){
$conditions+=array('AND' => array('anno <=' => "$an2"));
}else{
$conditions+=array('OR' => array('anno BETWEEN ? AND ?' => array($an,$an2)));
}
$u = $this->paginate('CdBiblio',$conditions);
为了
哦,还有。。。我会用实词来表示变量。理解什么是什么总是比创建没有意义的变量更好,比如
$a
。这使得以后修改代码和防止编码错误变得更容易。我尝试过,但它说:SQL错误:1054:where子句中的未知列“ArrayArrayArray”,我想你有一些whoodoo技能让数组做他们不应该做的事情:)像什么?我没有在数组中使用数组,但我相信它也应该可以工作。我做的事情比较简单,但结构相同:$conditions=array('Post.status\u id'=>$statusIds)
然后$conditions=$conditions+array('Post.department\u id'=>$departmentIds)代码>抱歉,但这不起作用:数组键是相同的,因此第二个和'
将覆盖第一个。您必须使用$conditions[]=array(…)
。(CakePHP可以读取嵌套数组。)您考虑过吗?这真的很好,为可读性格式化代码将是一个很好的开始
if ($an==''&&$an2=='')
if (!$an && !$an2)