1

知道为什么我的 Doctrine 1.2 模型返回整数定义字段的字符串值吗?

基本模型定义为:

abstract class Kwis_Model_Base_User extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->setTableName('user');
        $this->hasColumn('id', 'integer', 4, array(
             'unsigned' => true,
             'primary' => true,
             'autoincrement' => true,
             ));

        // more fields
        // ...
    }

表模型定义为:

class Kwis_Model_UserTable extends Kwis_Model_BaseTable
{

    /**
     * Returns an instance of this class.
     *
     * @return object Kwis_Model_UserTable
     */
    public static function getInstance()
    {
        $table = Doctrine_Core::getTable('Kwis_Model_User');
        return $table;
    }

    // other methods
    // ...
}

示例控制器代码:

class TestController extends Zend_Controller_Action
{
    public function indexAction()
    {
        $userTable = Kwis_Model_UserTable::getInstance();
        $user = $userTable->find(1);
        echo "<pre>" . var_dump($user->id) . "</pre>"; die();
    }
}

产生的输出:

 string '1' (length=1)

任何想法,非常感谢。;-)

4

2 回答 2

3

同样作为下面的答案,对字符串左手和右手的按位操作将对 ASCII 值进行操作。

您可以使用水合监听器将 int 转换为 int 。要么创建一个新的 hydration listener 并将其添加到记录 (1),要么只使用记录对象 (2) 中的现有钩子模板。

1: http: //www.doctrine-project.org/projects/orm/1.2/docs/manual/event-listeners/pl#record-listeners

2:

   abstract class My_Rec extends Doctrine_Record {
    function postHydrate($event) {
        $data = $event->data;
        $data['status'] = (int) $data['status'];
        $event->data = $data;       
    }
}
于 2011-02-10T09:46:27.383 回答
0

这难道不是在 PHP 中使用无类型变量的好处吗?这会导致什么问题?如果需要,您仍然可以对其进行数学运算。虽然,我怀疑除了字符串比较之外,您永远不需要对用户 ID 执行任何操作。

于 2010-12-21T05:04:04.070 回答