为什么$ db-> info(' primary')返回数组而不是字符串?

时间:2014-07-22 16:49:53

标签: php mysql zend-framework primary-key zend-db-table

我一直在寻找一两个小时的答案而无法找到答案。我有这个类扩展Zend_Db_Table_Abstract,我填充表名和主键。这是:

<?php

class Produit_Model_DbTable_Fiche extends Zend_Db_Table_Abstract
{
    /**
     * @var string
     */
    protected $_name = 'table_name';

    /**
     * @var string
     */
    protected $_primary = 'primary';

    public function getName()
    {
        return $this->_name;
    }

    public function getPrimary()
    {
        return $this->_primary;
    }
}

如您所见,受保护的属性_primary是一个字符串。但是,当我通过以下代码中的$db->getPrimary()检索此信息时,它将作为只有一个条目[1] => 'id'的数组返回。

// $db is an instance of Produit_Model_DbTable_Fiche
$select = $db->select();
$select->from($db, $columns)
       ->where($db->info('primary').' = ?', $id);
$row = $db->fetchRow($select);

错误消息指出Column not found: 1054 Unknown column 'Array' in 'where clause',因为正如我所说,我试图用$db->info('primary')回显一个数组,而我希望它是一个字符串。

PS:我已经看过这个问题/答案,但我仍处于模糊状态:Zend_Db_Table_Abstract::_primary returns array?

1 个答案:

答案 0 :(得分:0)

有问题的答案你链接 - “Zend_Db_Table将主键存储为数组,以防使用复合键”。这意味着SQL表可以将多个列设置为PRIMARY KEY,从而创建一个名为“复合键”的东西。这样的密钥不能存储在单个变量中,这就是为什么它存储在数组中。大多数表使用单键,因此Zend可以根据键返回字符串或数组,但是它们希望保持一致并返回始终为数组。