Модели Doctrine 1.2 возвращают целочисленные поля в виде строковых значений, используя Zend Framework и MySQL 5 - PullRequest
1 голос
/ 19 декабря 2010

Есть идеи, почему мои модели Doctrine 1.2 возвращают string значения для целых определенных полей?

Базовая модель определяется как:

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
    // ...
}

Пример кода контроллера:

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

Произведенная продукция:

 string '1' (length=1)

Любые идеи, с благодарностью.; -)

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Также в качестве ответа на приведенное ниже побитовые операции со строками слева и справа будут работать со значением ASCII.

Вы можете разыграть int как int, используя слушатель гидратации. Либо создайте новый слушатель гидратации и добавьте его в запись (1), либо просто используйте существующие шаблоны ловушек в объекте записи (2).

1: http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual / слушатели событий / 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 голосов
/ 21 декабря 2010

Разве это не преимущество использования переменных без типов в PHP? Какая проблема это вызывает? Вы все еще можете делать математические операции над ним, если хотите. Хотя я подозреваю, что вам никогда не понадобится выполнять какие-либо действия с идентификатором пользователя, кроме сравнения строк.

...