Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend:Select object:如何替换由from()设置的选定列?_Php_Zend Framework - Fatal编程技术网

Php Zend:Select object:如何替换由from()设置的选定列?

Php Zend:Select object:如何替换由from()设置的选定列?,php,zend-framework,Php,Zend Framework,首先,这就是我想做的: 在库中的一个类中,我想计算搜索结果的行总数。该类使用由搜索结果的附加模型设置的选择对象。我现在的问题是,这个select()已经通过from()设置了请求的列,但是为了简单地计算行数,我只想选择id,因为网站必须执行。我不能简单地更改对象的值,因为我在库中使用它,并且变量受到保护。不幸的是,Zend没有mySql count命令的功能,我不想使用静态mySql代码,因为将来我们可能会切换数据库系统 现在我的问题是: Zend_是否有可能选择如何更改所选列?这是一个项目,未

首先,这就是我想做的:

在库中的一个类中,我想计算搜索结果的行总数。该类使用由搜索结果的附加模型设置的选择对象。我现在的问题是,这个select()已经通过from()设置了请求的列,但是为了简单地计算行数,我只想选择id,因为网站必须执行。我不能简单地更改对象的值,因为我在库中使用它,并且变量受到保护。不幸的是,Zend没有mySql count命令的功能,我不想使用静态mySql代码,因为将来我们可能会切换数据库系统

现在我的问题是:


Zend_是否有可能选择如何更改所选列?

这是一个项目,未经测试,但其中一个应该可以工作

$select->from(array("table_name" => "table_name"), array("my_col" => "COUNT(id)"));

$select->from(array("table_name"), array("my_col" => "COUNT(id)"));
这和

SELECT COUNT(id) as my_col FROM table_name 
希望有帮助


Jake

要在select中使用mysql命令,需要使用Zend_Db_Expr:

$select = $this->select()
            ->from('myTable', new Zend_Db_Expr('COUNT(id) as count'));
echo $select; //SELECT COUNT(id) as count FROM myTable;
试试这个:

$select->reset(Zend_Db_Select::COLUMNS)
       ->from('thetable', 'COUNT(*)');

将“thetable”替换为正确的表名。

此表对我不起作用(我只需要从一个联接表中选择):

也许是因为我加入了。但是,解决方案是:先使用reset()然后使用columns():


仅供参考,Zend Framework的版本是1.12

不幸的是,我得到了一个例外:您不能多次定义相关名称“bd_users”,您可以传递一个空数组作为第一个参数,因为您不需要重新添加表。这样它就不会试图重新声明相关性。我不在模型中,也不能在模型中编写此代码。请阅读问题。如果你想使用count,那么正确的方法应该是
from('myTable',array('count'=>new Zend_Db_Expr('count(*')))
(或者ID而不是*如果需要的话)。但是你永远不应该自己别名任何东西。我也必须从中删除常量,但这正是我想要的,非常感谢!我有一些“内部联接”在我的查询中,并且在重置列之后,它会自动向FROM表添加一个“内部联接”!我做错了什么?
$select->reset(Zend_Db_Select::COLUMNS)
   ->from('thetable', 'COUNT(*)');
$select->setIntegrityCheck(false)
        ->from(['t1' => 'table1'])
        ->join(['t2' => 't2'], 't1.id = t2.t1_id')
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns('t1.*');