Правила Kohana 3.2 не работают

При определении правил должно ли имя поля совпадать с именем столбца в базе данных?

У меня проблема: если имя поля и имя столбца не совпадают, правила отображаются, и в базу данных ничего не сохраняется.

Что работает:

База данных

user_id | username

Поле

<?php echo Form::input('username', $username, array('id' => 'username')); ?><?php echo Arr::get($errors, 'username');?>

Модель

class Model_User extends ORM {

    protected $_primary_key = 'user_id';

    public function rules()
    {
        return array(
            'username' => array(
                array('not_empty'),
            ),
        );
    }
}

Сообщения

return array(
    'username' => array(
        'not_empty' => 'You must provide a username.',
    ),
);

Что не работает:

База данных

user_id | username

Поле

<?php echo Form::input('membername', $username, array('id' => 'username')); ?><?php echo Arr::get($errors, 'membername');?>

Модель

class Model_User extends ORM {

    protected $_primary_key = 'user_id';

    public function rules()
    {
        return array(
            'membername' => array(
                array('not_empty'),
            ),
        );
    }
}

Сообщения

return array(
    'membername' => array(
        'not_empty' => 'You must provide a username.',
    ),
);

Кажется, если я изменю имя поля на что-то другое, кроме имени пользователя, функция правил не будет работать правильно.

Если я не применяю никаких правил, изменение имени пользователя на другое не вызывает проблем с сохранением данных в базе данных.


person markerpower    schedule 01.02.2013    source источник


Ответы (1)


Сопоставление имен столбцов из вашей базы данных с другими внутренними именами невозможно. То же имя столбца также используется для установки правил, меток и т. д. Я не понимаю, почему вы хотите изменить имена столбцов, это было бы плохо для ожиданий разработчиков. В этом случае я советую переименовать столбцы таблицы.

Единственная возможность, которую Kohana ORM предоставляет для управления столбцами вашей таблицы, — это внести в белый список массив имен столбцов, которые должны использоваться. Используйте эту переменную в вашем модуле ORM:

protected $_table_columns = array('column1','column2');
person Daan    schedule 02.02.2013
comment
Я надеялся, что это не так. Мой код работает без правил. Мои имена полей отличаются от имени столбца, потому что вся информация поступает из одной и той же таблицы, поэтому они не могут называться одним и тем же именем поля. Это таблица параметров, поэтому одна строка будет названием сайта, а следующая строка — описанием сайта. Именами полей будут имя сайта и описание сайта вместо имени столбца, из которого поступает информация. - person markerpower; 03.02.2013
comment
Похоже, мне нужно сделать внешнюю проверку. - person markerpower; 03.02.2013