标签: zend-db

有没有办法从Zend框架的查询中获取记录数?

鉴于下面的泛型选择,有没有办法从Zend Framework获取查询返回的记录数?循环中的$ row ++对于我的解决方案是不可接受的,因为我正在使用分页(尽管它不在我的示例中).

我也不想用"Count(*)"添加另一个查询.

$query = "Select * from Users where active = 1";
$stmt = $db->query($query);

$noOfRows = ???;

while ($row = $stmt->fetch())
{

  // processing
}
Run Code Online (Sandbox Code Playgroud)

php zend-framework zend-db

7
推荐指数
2
解决办法
8130
查看次数

Zend框架组由

我正在尝试使用Zend框架做一组.这是我的代码:

$table = new TableClass();
$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );
$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;
Run Code Online (Sandbox Code Playgroud)

TableClass扩展了'Zend_Db_Table_Abstract'.

我可以通过查看mysql查询日志来查看查询.查询格式正确 - 在查询中命名了column1,如果我在mysql workbench中运行查询,结果看起来是正确的.

我无法访问'column1'中的数据 - 我总是遇到这个异常:

未捕获的异常'Zend_Db_Table_Row_Exception',消息'Specified column"column1"不在行中'

但是,我可以毫无问题地访问日期列.

我试过了:

  • 通过数组索引访问列:$ result [0]但是你得到一个异常(不能通过索引访问列).

  • 不使用列别名:$ select-> from("table",array("date","sum(column1)")); $ column1 = $ result ["sum(column1)"]; 但是你得到一个例外(没有这样的列"sum(column1)").

  • 抛出Zend_Db_Expr:"column1"=> new Zend_Db_Expr("sum(column1)")但这没有帮助.

我见过的其他一些例子建议使用没有聚合函数的列名,即.而不是"总和(列1)","列1",但似乎并没有给我的答案 - 查询不具有任何聚合函数所以MySQL将不知道该怎么用它做.

任何帮助赞赏.

zend-framework zend-db

7
推荐指数
1
解决办法
2万
查看次数

Zend选择NOT IN

我有两个带有相关数据的表,我想从一个表中选择另一个表中不存在的所有记录,加上相关表上的一些其他标准,如下所示(123仅用于说明目的):

TABLE A
    ID
    SOMETHING

TABLE B
    TABLE_A_ID
    TABLE_C_ID
    SOMETHING
Run Code Online (Sandbox Code Playgroud)

我的查询直接针对数据运行,如下所示

SELECT A.SOMETHING 
    FROM A 
    WHERE A.ID NOT IN (
        SELECT 
            B.TABLE_A_ID AS ID 
            FROM B 
            WHERE TABLE_C_ID = 123
    );
Run Code Online (Sandbox Code Playgroud)

我如何在Zend中运行它?

php mysql zend-framework zend-db

7
推荐指数
1
解决办法
1万
查看次数

在Zend Framework 2上使用表达式执行多个连接

实际上我正在研究一个项目,我正在研究Zend Framework 2如何处理复杂的查询(特别是关于如何连接n:m表以及如何使用GROUP_CONCAT和其他函数).您是否知道执行此查询的最佳做法:

SELECT o. * , x.group_one, x.group_two
FROM table_one AS o
LEFT JOIN (
SELECT r.fk1, GROUP_CONCAT( t.field_one ) AS group_one, GROUP_CONCAT( t.field_two ) AS group_two
FROM table_three AS r
INNER JOIN table_two AS t ON r.fk2 = t.id
GROUP BY r.fk1
) AS x ON o.id = x.fk1
LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)

使用此db模式:

--
-- Database: `table-test-1`
--

-- --------------------------------------------------------

--
-- Structure of table `table_one`
--

CREATE TABLE `table_one` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, …
Run Code Online (Sandbox Code Playgroud)

php zend-db zend-framework2

7
推荐指数
1
解决办法
3683
查看次数

ZF2 + Zend\Db\Sql\Update,添加到当前值

我正在尝试做一些相对简单但却无法解决的问题.

我只想在数据库中添加一个当前值,无论如何要做到相当于:

UPDATE `tablename` SET fieldB = fieldB + 1 WHERE fieldA='X'
Run Code Online (Sandbox Code Playgroud)

使用Zend/db更新功能?

zend-db zend-framework2

7
推荐指数
1
解决办法
4432
查看次数

Zend_Validate_Db_RecordExists对2个字段

我通常使用Zend_Validate_Db_RecordExists来更新或插入记录.这适用于一个字段进行检查.如果要检查两个字段,该怎么做?

 $validator = new Zend_Validate_Db_RecordExists(
        array(
            'table' => $this->_name,
            'field' => 'id_sector,day_of_week'
            )
    );

    if ($validator->isValid($fields_values['id_sector'],$fields_values['day_of_week'])){
        //true
    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用数组和逗号分隔列表,没有任何作用...欢迎任何帮助.关心安德烈

validation zend-framework zend-db

6
推荐指数
1
解决办法
3408
查看次数

使用具体的Zend_Db_Table_Abstract有效地遍历行集

我正在使用Zend_Db_Table_Abstract的具体实现:

class DB_TestClass extends Zend_Db_Table_Abstract {
    protected $_name = "test.TestData";
}
Run Code Online (Sandbox Code Playgroud)

如果我想要选择表中的所有行,我似乎有一个选项:

$t = new DB_TestClass;
$rowset = $t->fetchAll();
Run Code Online (Sandbox Code Playgroud)

这将返回Zend_Db_Table_Rowset的一个实例,该实例具有可循环的可迭代接口,并作为rowClass实例访问每个行条目:

foreach($rowset as $row) {
    var_dump($row);
}  
Run Code Online (Sandbox Code Playgroud)

但是,行集已经将数据库中的每一行加载到内存中(!)在小表上这没关系,但是在大型表 - 例如数千行 - 它很快耗尽了PHP可用的内存并且脚本死掉了.

我怎样才能使用Zend_Db迭代结果集,一次从语句句柄中检索一行,ala mysql_fetch_assoc()?这将允许有效访问任意数量的行(数千,数百万)而不使用过多的内存.

在此先感谢您的任何建议.

php zend-framework zend-db

6
推荐指数
1
解决办法
674
查看次数

在Zend框架中选择一个带虚拟值的虚拟列?

我如何指定Zend Db Table Select获取虚拟列.

我想生成这样的SQL

SELECT 'ABC' AS xyz , name FROM employee

编辑:

我试过这个

$select->from('employee',array( 
        'xyz'=>'ABC',
        'name'
));
Run Code Online (Sandbox Code Playgroud)

还有

$select->from('employee',"'ABC' AS xyz , name"));

在两种情况下,Zend都会智能地将"ABC"视为模式中的一个字段.所以它产生类似的东西

SELECT `employee`.`'ABC'` AS `xyz` , `name` FROM `employee`
Run Code Online (Sandbox Code Playgroud)

这会产生错误,因为ABC不是员工的一个领域

php zend-framework zend-db

6
推荐指数
1
解决办法
2404
查看次数

Zend Framework 2 - 应用程序/模块/服务经理 - 哦,我的

我刚开始学习Zend Framework 2作为Zend Framework 1的长期开发人员.围绕新术语缠绕我有点麻烦.

回到ZF1,如果我想创建一个对应用程序是全局的记录器,我会将配置添加到application.ini文件中,引导程序会将其初始化为资源(我希望我说的是正确的).那么从我的任何模块控制器,我可以通过bootstrap资源访问记录器.

输入ZF2,模块是一个有点不同的野兽,它们是自包含的,但我对它们如何与应用程序交互有点困惑.在我看来,这就是ServiceManager发挥作用的地方.我的目标是,让我的模块(不是控制器,而不是模块本身)检查应用程序是否定义了记录器,如果有,则在整个模块中使用该记录器.如果应用程序没有定义记录器,我希望模块为模块范围的日志记录定义记录器.

这个问题也与数据库有关,假设我想让应用程序定义数据库连接的逻辑,而我希望模块定义它所需的表的逻辑.我究竟如何配置它,以及如何在应用程序中定义数据库资源时如何/在何处判断.

注意:我已经浏览了Rob Allen的快速入门(相当充分的信息和我发现的唯一缺乏默默无闻的资源)和ZF2(readthedocs),并且已经用谷歌搜索过了.我发现的是,当涉及到某些拼图的"哪里"时,信息通常是非常模糊的.

zend-db zend-log zend-framework2

6
推荐指数
1
解决办法
1515
查看次数

选择查询无法与另一个表连接 - JOIN Zend Framework

发生错误应用程序错误异常信息:

消息:选择查询无法与另一个表连接这是我的代码:

<?php

class Application_Model_DbTable_Seguimientos extends Zend_Db_Table_Abstract {

    protected $_name = 'Seguimientos';    
    public function buscarCaso($cod_beneficiario) {
        $consulta = $this->select()

        ->from(array('seg' => 'Seguimientos'))
        ->join(array('casos' => 'Asuntos_Estudiantiles'),
        'seg.cod_radicado = casos.codigo_radicado')
        ->where('casos.cod_beneficiario = ?', $cod_beneficiario);

        $query = $this->fetchAll($consulta)->toArray();
        return $query;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用Zend Framework 1 错误

php mysql zend-framework zend-db

6
推荐指数
1
解决办法
1万
查看次数