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 に答える