2014-07-22 3 views
-1

Я искал ответ в течение часа или двух и не могу его найти. У меня есть этот класс, который расширяет 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?

ответ

0

Существует ответ на вопрос, который вы связаны - «Zend_Db_Table хранит первичные ключи в виде массива, в случае ключевым соединением является используемый". Это означает, что таблицы SQL могут иметь более одного столбца, заданного как PRIMARY KEY, создавая что-то, называемое «составным ключом». Такой ключ не может быть сохранен в одной переменной, поэтому он хранится в массиве. В большинстве таблиц используется один ключ, поэтому Zend может возвращать строку или массив в зависимости от ключа, но они предпочитают оставаться последовательными и всегда возвращать массив.

Смежные вопросы