Zend DB с проблемами Postgres с nextval ()

Хорошо, это вопрос из двух частей, первая основная проблема - это бит nextval(). У меня есть таблица, в которой один из столбцов является столбцом с автоматическим увеличением. Поскольку я новичок в postgres и Zend DB, у меня возникли проблемы. Вставка новой строки в таблицу.

Это то, что у меня есть до сих пор (и в CLI это работает). Но не в Zend DB.

class Comments extends Zend_Db_Table_Abstract
{

    protected $_name = 'comments';

    public function setComment($comment_id = null, $id = null, $comment = null)
    {
        if(($comment_id == null)||(empty($comment_id))||(trim($comment_id) == '')){return false;}
        if(($id == null)||(empty($id))||(trim($id) == '')){return false;}
        if(($comment == null)||(empty($comment))||(trim($comment) == '')){return false;}

        echo 'check one';

        $db = Zend_Db_Table::getDefaultAdapter();
        if($comment_id == "none")
        {
            $created = time()*1000;
            $data = array(
                        "comment_id" => nextval('comments_comment_id_seq'),
                        "comment" => $comment,
                        "comment_level" => 1,
                        "is_active" => true,
                        "status" => 0,
                        "id" => $id,
                        "user_id" => $_SESSION['role']['user_id'],
                        "ts_create" => $created,
                        "ts_mod" => $created
                    );
            $table->insert($data);
            return true;
        }

    }
}

Я получаю следующую ошибку:

Неустранимая ошибка: вызов неопределенной функции nextval () в /home/src/branches/portal/application/model/Comments.php в строке 45

Так что не совсем уверен, как приспособиться к этому. Я больше знаком с mySQL, где я могу просто отбросить NULL, и он будет автоматически увеличиваться. Итак, в целом большая проблема заключается в следующем: есть ли у Zend DB что-нибудь в структуре, с помощью которой я могу исправить эту проблему?

Следующая часть, поскольку это вопрос из двух частей. При использовании $table->insert($data); будет ли автоматически использоваться переменная $_name? Я прочитал документ Zend по этому вопросу, но в настоящее время меня немного сбивает с толку, как определить правильную таблицу в случае вставки.


person chris    schedule 24.09.2012    source источник
comment
Нет функции php с именем nextval   -  person zerkms    schedule 25.09.2012
comment
да, я знаю, что нет функции php nextval. но с postgres есть.   -  person chris    schedule 25.09.2012
comment
поэтому вызывайте функцию postgres, а не функцию php ;-)   -  person zerkms    schedule 25.09.2012


Ответы (1)


Использовать это:

"comment_id" => new Zend_Db_Expr("nextval('comments_comment_id_seq')"),
person zerkms    schedule 24.09.2012
comment
Хорошо, теперь ошибка, которую я получал, исчезла, я ценю это. Не знаю, где вы это нашли, но потрясающий звонок. Теперь моя вторая часть вопроса, в которой я задавался вопросом о вставке, кажется верной, где это не удается. Есть идеи по этому поводу? - person chris; 25.09.2012
comment
@chris: что, если ты попробуешь сначала и увидишь? - person zerkms; 25.09.2012
comment
Я сделал, я получаю сообщение об ошибке undefined. Я предполагаю, что $ table - это бит undefined, как я уже сказал, вставка / обновление немного сбивает меня с толку с материалом Zend DB. Возможно, это первый раз, когда я серьезно взялся за использование уровня ORM для вещей, связанных с SQL. Так что я немного не в своей игре, пока я не пойму это лучше - person chris; 25.09.2012
comment
@chris: и какова настоящая ошибка? Предположения - это круто, но программисты работают с фактами. - person zerkms; 25.09.2012
comment
Да, я просто понял это, копируя примеры и работая с ними, моя переменная $db, а не $table, и тогда похоже, что я действительно могу сделать что-то вроде $db->insert($this->_name, $data), когда я копался в примерах на сайте Zend, это только выражало Переменная $ data передается в функцию вставки. - person chris; 25.09.2012
comment
в общем, у меня только что была первая удачная вставка, теперь перехожу к обновлению. В любом случае я благодарю вас за вашу помощь. - person chris; 25.09.2012