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 - 为啥?的主要内容,如果未能解决你的问题,请参考以下文章