0

我正在使用 Postgre 9,并通过 PDO 连接到它。我使用了来自 auth-schema-postgresql.sql 的模式,所以表应该没问题。

我正在做这样的事情:

$post = $this->request->post();
$member = new Model_User(); // ORM::factory('user');s
$member->create_user($post, array('email', 'username', 'password'));

模型用户没什么花哨的

<?php defined('SYSPATH') or die('No direct access allowed.');

class Model_User extends Model_Auth_User {



    protected $_table_columns = array(
        'id'    => NULL,
        'email'  => NULL,
        'username'  => NULL,
        'password'  => NULL,
        'logins'  => NULL,
        'last_login'  => NULL
    );

} // End User Model

问题是 $member->object() 中的 id 值在保存后等于 false(pk() 和 $member->id 相同)。行创建得很好,它有它的 id,但我非常希望 pk() 方法给出这个数字。

4

1 回答 1

1

在 PDO 中,您必须提供与表 User 的主键关联的 Sequence 对象的名称。它可能是 user_id_sequence。导航到文件“modules/database/classes/Kohana/Database/PDO.php”。在以下代码行 (188-196) 中:

elseif ($type === Database::INSERT)
    {
        // Return a list of insert id and rows created
        return array(
            $this->_connection->lastInsertId(),
            $result->rowCount(),
        );
    }

序列对象的名称必须作为 $this->_connection->lastInsertId() 方法的参数传递,如下所示:

elseif ($type === Database::INSERT)
    {
        // Return a list of insert id and rows created
        return array(
            $this->_connection->lastInsertId($sequence_name),
            $result->rowCount(),
        );
    }

这样,ORM 模型可以“知道”新记录的 id 由序列自动递增,因此 pk() 方法可以正常工作。

于 2012-12-19T20:47:16.610 回答