2010-11-07 65 views
0

我想用一个单一的查询检索:任何类型的学说:如何在查询中包含where子句?

  • 项目(不加过滤器);
  • 只有一个类别的项目(限于特定类别);

为此,我应该能够编写一个Doctrine查询,该查询只有在满足某些条件时才会包含where子句(例如,URL的一部分存在),否则where子句不包含在查询中。

当然,我尝试使用If语句,但由于原则查询被链接,错误被抛出。所以我想解决方案可能是一些(对我来说未知的)写一个unchained形式的原则查询的方式(通过没有每一行以“ - >”开头,并且还有查询的每一行以分号结尾“ ;“)

那样我就可以使用IF语句了。

或者,这件事可能已经有一些非常简单的解决方案了?

感谢您的回复!

回答

1

我不熟悉Codeigniter,但不能写这样的东西吗?

$q = Doctrine_Query::create() 
    ->from('items'); 

if ($cat) 
    $q->where('category = ?', $cat); 
+0

这似乎是可能的。它符合所有工作条件,即。分号在最后,所以IF子句不会干扰查询本身,而是插入(或不)该额外的行(必要时在where子句中),就像我之前使用CI Active记录一样。 我会试一试,让它知道它是否有效。 谢谢! – developer10 2010-11-07 09:34:57

+0

只是为了确认我设法使用这种方式的代码,它的工作原理!解决方案 – developer10 2010-11-08 21:47:43

0

在您的模型中,将where的条件作为函数中的参数传递。 在下面的示例中,我假设函数名称为filter_query()并将where条件作为参数传递。

function filter_query($condition=''){ 

$this->db->select('*'); 
$this->db->from('TABLE NAME'); 
    if($condition != ''){ 
    $this->db->where('condition',$condition); 
    } 
} 

在上例中我使用了Codeigniter's Active Record Class

+0

嗯,事情是我实际上是从CI的活动记录重写为Doctrine,所以我已经有工作代码写在活动记录。 不过谢谢! – developer10 2010-11-07 09:32:26