Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为啥?

Posted

技术标签:

【中文标题】Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为啥?【英文标题】:Kohana 3.2 - ORM's pk() methods returns false after save() (create()) - why?Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为什么? 【发布时间】:2012-12-18 22:23:13 【问题描述】:

我正在使用 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() 方法给出这个数字。

【问题讨论】:

$member->object() 等于 false”是什么意思?你到底和什么比较?以及以何种方式(严格,如===,或不严格,如==)? 不是 $member->object() 等于 false,而是其中的 id 值。 $values = $member->object(); var_dump($values['id']); // 打印 bool(false) 【参考方案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() 方法可以正常工作。

【讨论】:

以上是关于Kohana 3.2 - ORM 的 pk() 方法在 save() (create()) 之后返回 false - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3.2 ORM 不包含模型信息

Kohana 3.2 中使用 ORM 模型(结果)的字段的自定义过滤器

Kohana ORM 缓存/缓存设计方法

Kohana 3.1 都有哪些可用的 ORM 解决方案?

Kohana:授权 ORM

Kohana 3 ORM:构造函数“加载后”