Zend数据库表getrow

时间:2013-01-11 19:44:52

标签: database zend-framework fetch

我有一个串行密钥表

+----+---------------------+------+
| id | product_key         | used |
+----+---------------------+------+
|  1 | 3C45-GH76-9V74-HLKJ |    1 |
|  2 | REDF-6KI9-00IU-4867 |    0 |
|  3 | 1111-1111-1111-1111 |    0 |
|  4 | 2222-2222-2222-2222 |    0 |
|  5 | 3333-3333-3333-3333 |    0 |
+----+---------------------+------+

我想使用zend框架获得used=0的一行记录。如果used=1已选择,则更改为product_key

我使用Zend感到困惑。

我认为是这样的,但是如果选择了该产品密钥,如何分配“1”?

$productKey = $this->_helper->model('ProductKeys')->fetchOne('SELECT * from product_keys WHERE used=0 LIMIT 1');

1 个答案:

答案 0 :(得分:1)

在单个简单查询中似乎没有办法实现。此外, fetchOne 仅获取第一条记录的第一列。该助手只返回ID,而不是product_key。

选项1: 修改ProductKeys模型以获取密钥并将其设置为使用:

class My_Model_ProductKeys extends Zend_Db_Table_Abstract
...
function getKeyAndMarkUsed()
{
  $select = $this->select();
  $select->where('used=?',1)->limit(1)->order('ID');
  $keyRow = $this->fetchRow();
  if ($keyRow){
    $this->update(array('used'=>1),'id='.$keyRow->ID);
    return $keyRow->id;
  }
  else{
    //no keys left! what to do??? Create a new key?
    throw new Exception('No keys left!');
  }
}

然后你会:

$productKey = $this->_helper->model('ProductKeys')->getKeyAndMarkUsed();

选项2 : 创建一个数据库过程来执行上述功能并调用它。