2010-12-19 76 views
1

任何想法整型字段作为字符串值,为什么我的学说1.2机型都进行了整数 -defined领域返回字符串值?定义学说1.2车型返回使用Zend Framework和MySQL 5

基本型号为:

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) 

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

回答

3

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

您可以使用水合侦听器将int转换为int。要么创建一个新的水合监听器并将其添加到记录(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;  
    } 
} 
+0

+1不错。无论我是通过水合器和/或听众在记录级别还是在现场级别使用标准getXXX/setXXX访问器/增强器都是我需要考虑的事情。谢谢! – 2011-02-10 13:50:11

0

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

+1

嗯,这是逼着我是一个小的,我用平等的检查更加小心。我发现我在做(int)的投入次数比我想要的要多(可能最好为模型编写自定义的getXXX/setXXX方法来执行这些投射)。但通常,我只是有点惊讶,因为基本模型上的hasColumn()方法指定了类型。正如你所暗示的那样,这不是一个关键问题。只是想确保我没有做错什么 - 这通常是解释;-) – 2010-12-21 13:00:06

+0

如果你从MySQL中选择ID并试图将它作为“WHERE”条件传递给MongoDB,它肯定会导致麻烦!因为如果MongoDB字段包含整数并且您传递了字符串,那么clasue将失败。 – 2015-12-11 11:05:42