首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

Zend_Db_Table 如何取得某个字段的值

如果用fetchRow的话,相当于执行的是select * from...,我现在希望的是select user_id from...,该如何解决
昵称: lzyy  时间: 2007-08-11 10:18:00
实际上只能 fetchRow 以后再取字段~~

    protected function _fetch($where = null, $order = null, $count = null, $offset = null)

这是 Zend_Db_Table 的内部取值的方法。

        $select->from($this->_name, $this->_cols, $this->_schema);

这里的 $this->_cols 是所有字段的一个数组。
昵称: mikespook  时间: 2007-08-11 10:43:00
复制PHP内容到剪贴板
PHP代码:
$rowset $this->fetchRow($where);
$rowset->name;//该方式就是拿单个数据

昵称: xgwork  时间: 2007-08-11 11:18:00
看来也只能这样了
昵称: lzyy  时间: 2007-08-11 13:19:00
这样效率不高,其实还是要先取所有字段。。如果数据量大,最好还是直接用SQL或构建一个Zend_Db_Select对象。
昵称: Haohappy  时间: 2007-08-11 16:23:00
<?php
//
// SELECT * FROM round_table
//     WHERE noble_title = "Sir"
//     AND first_name = "Robin"
//     ORDER BY favorite_color
//

class RoundTable extends Zend_Db_Table {}

$table = new RoundTable();
$db = $table->getAdapter();

$where = $db->quoteInto('noble_title = ?', 'Sir')
       . $db->quoteInto('AND first_name = ?', 'Robin');

$order = 'favorite_color';

$row = $table->fetchRow($where, $order);
?>
昵称: bingquan3846  时间: 2007-08-11 17:13:00
To 楼上,楼主是要取一个字段的所有记录,不是一条记录。
昵称: Haohappy  时间: 2007-08-11 19:26:00
引用:
原帖由 Haohappy 于 2007-8-11 16:23 发表
这样效率不高,其实还是要先取所有字段。。如果数据量大,最好还是直接用SQL或构建一个Zend_Db_Select对象。
如果数据库查询要用到join,就不得不用Zend_Db_Select对象了。。
昵称: scauren  时间: 2007-08-13 07:31:00
顺便问一下:
复制内容到剪贴板
代码:
<?php
       
// 构造基础的select方法:
$select = $db->select();
$select->from('foo', '*');
$select->order('id');

// ... 限制到第三页,每页包括10行数据
$select->limitPage(3, 10);

//
// 在MySQL/PostgreSQL/SQLite下, 可以得到:
//
// SELECT * FROM foo
//     ORDER BY id ASC
//     LIMIT 10 OFFSET 20
//
上面的例子是:SELECT * FROM foo
如果我要指定其中的字段,
$select->from('foo', '*');应该怎么改呢?
昵称: scauren  时间: 2007-08-13 07:33:00
$select->from('foo', '*');

foo是表名;
*是要查询的字段名

如果为*的话就是查询整行的数据;

如果查询一个字段可以写成  $select->from('foo', 'username');  这个就是查询foo表中username字段的内容;


如果查询两个或多个个字段可以写成  $select->from('foo', array('username','psword',.......));  这个就是查询foo表中username字段、psword字段等的内容。
昵称: come1997  时间: 2007-08-13 16:39:00
引用:
原帖由 come1997 于 2007-8-13 16:39 发表
$select->from('foo', '*');

foo是表名;
*是要查询的字段名

如果为*的话就是查询整行的数据;

如果查询一个字段可以写成  $select->from('foo', 'username');  这个就是查询foo表中username字段的内 ...
虽然已经解决,还是谢谢这位朋友:P:P
昵称: scauren  时间: 2007-08-13 18:54:00
select * ...我是继承了Zend_Db_Table加了
二个方法
setCols( array $cols );
getCols();

Zend_Db_Table的工作流程是,先用adapter里的describeTable把表的结构读出来,这是要查询的字段其实不是 * ,是一个包含了所有字段的数组,在查询之前只要把Zend_Db_Table::_cols;赋值成为你要查询的字段就好了
如:
复制PHP内容到剪贴板
PHP代码:
class My_Table extedns Zend_Db_Table {

    public function 
setCols ( array $cols ) {
       
$this->_cols $cols;
    }

    public function 
getCols() {
      return 
$this->_cols;
    }
 }

 
$myTable = new My_Table();
 
$myTable->setCols( array( 'id' ) );
 
Zend_Debug::dump$myTable->fetchRow$where ) );

[ 本帖最后由 jame298 于 2007-8-14 14:25 编辑 ]
昵称: jame298  时间: 2007-08-14 14:18:00
谢谢jame298,不仅给出了好的解决方法,还熟悉了ZDT的流程
昵称: lzyy  时间: 2007-08-15 02:10:00