2013-03-14 52 views
0

我有一个查询:通过调用 - >选择两次来更改选择参数?

$query = 
    Yii::app()->db->createCommand()->setFetchMode(PDO::FETCH_OBJ) 
    ->select('*') 
    ->from('products p') 
    ->limit(5); 

然后我得到的结果:

$result = $query->queryAll(); 

如何使用现有的查询对象,而无需重写它的“选择”,重新实例化值和“限制”。我想将选择更改为“计数(p.productid)”并取消设置限制。我尝试了以下但它不起作用:

$query = 
    Yii::app()->db->createCommand()->setFetchMode(PDO::FETCH_OBJ) 
    ->select('*') 
    ->from('products p') 
    ->limit(5); 

$result = $query->queryAll(); 


$query = 
    $query 
    ->select('count(p.productid)') 
    ->limit(-1); 
$result2 = $query->queryRow(); 

这仍然返回第一个选择的结果?

编辑

基本上,我想重置选择。它看起来像它建立在选择。所以,我认为你可以这样做:

$query = 
$query->select('something') 
    ->select('somethingElse') 
    ->select('somethingMoreStuff'); 

我的问题是,我想“重置”选择。所以这些选择基本上是UNDO。这可能吗?

+0

您可以简单地使用count函数类名::模型 - >计数(); – 2013-03-14 08:34:00

+0

在我正在做的上下文中不起作用。请详细解释一下? – coderama 2013-03-14 08:45:22

+0

@NanheKumar除了'ClassName :: model-> count()'用于Active Record请求。所以第一个问题是你是否绝对需要使用DAO和查询构建器,或者你可以使用Active Record抽象? – darkheir 2013-03-14 08:50:03

回答

0

你为什么不这样做:

$intialQuery = 
    Yii::app()->db->createCommand()->setFetchMode(PDO::FETCH_OBJ) 
    ->from('products p'); 

$query = $intialQuery 
    ->select('*') 
    ->limit(5); 

$query2 = $intialQuery 
    ->select('count(p.productid) as number') 
    ->limit(-1); 

$result = $query->queryAll(); 
$result2 = $query2->queryRow(); 
+0

因为它仍然是双重代码。我想要做的就是重置选择。看我最后的编辑。 – coderama 2013-03-14 08:54:56

+0

因为我只将变化的值添加到第二个和第三个查询中,所以我没有双重代码!但是,我确实比你更多地使用var。 – darkheir 2013-03-14 08:58:27

+0

我简化了原来的问题。我实际上有几个连接,wheres和更多,我不想重写。我想要的是一种“重置”当前选择条件的方法。 – coderama 2013-03-14 08:59:38