Kohana ORM, несколько таблиц и save()

Jeysmook

Новичок
Допустим есть две таблицы:
data(id, title); data_description(data_id, description, keywords);

Все данные поступают из одной форм(inputs: title, description, keywords)
PHP:
// Модель для базы data
class Model_Data extentds ORM
{
       protected $_has_one = array(
               'description' => array(
               'model' => 'data_description',
               'foreign_key' => 'data_id',
        ));
       public function rules()
       {
              // Тут правила валидации
              return array();
       }
       protected $_table_name = 'data';

       public function createData($data)
       {
             try
             {
                       /*
                       * Вот тут у меня вопрос, как сохранить данные в таблице
                       * data и data_description?
                       */
             }
             catch(ORM_Validation_Exception $e)
             {
                    
                      /*
                       * Ошибки и data и data_description
                       */
                     return $e->errors('validation');
             }
             return TRUE;
       }
}
// Модель для базы data_description
class Model_Data_Description extentds ORM
{
        protected $_table_name = 'data_description';
        public function rules()
        {
              // Тут правила валидации
              return array();
        }
}
У меня получилось так, что ошибки выводятся по очереди, т.е. сначала ошибки модели data, а затем data_description. Нужно чтобы ошибки выводили вместе.
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума
Модели сохраняются по очереди (очевидно, сперва основная модель, т.е. Model_Data). Естественно, оборачиваем сохранение в try/catch. Если поймали ошибку валидации, то можно не возвращать сразу ошибку, а попробовать дополнительно проверить модель Model_Data_Description с помощью метода check(). Если и там есть ошибки - мержим их вместе и отдаем пользователю.

Конечно, возможен и второй вариант - когда основная модель корректная, а ошибки уже в описании. Тут 2 пути:

1. Сперва все проверяем, потом все сохраняем. То есть сперва 2 check(), потом 2 раза save(). Достаточно много гемора + не дает 100% гарантию, что не будет ошибок при сохранении.
2. Сохраняем основную модель и выдаем ошибку описания. В дальнейшем считаем, что не сохраняем объект, а редактируем. Естественно, это возможно только при условии, что допустимо наличие объекта без описания.
2.5. Все то же, что в п2, но у нас есть флаг активности объекта. Пока не сохранено нормально описание, основной объект остается неактивным и не находится различными поисками и прочими выборками на сайте.
 

Jeysmook

Новичок
Здыхлик,
дополнительно проверить модель Model_Data_Description с помощью метода check()
Это значит написать в блоке catch дополнительную валидацию?

А можно, что-то по типу:
PHP:
$user = ORM::factory('user')->create_user();
.
Т.е. Когда создаем нового пользователя, то после этого добавляем роли:
PHP:
$user->add('roles', 1);

Может и в моем случае так можно?
 
Последнее редактирование:

Здыхлик

Kohaner
Команда форума

Здыхлик

Kohaner
Команда форума
Здыхлик,

Это значит написать в блоке catch дополнительную валидацию?

А можно, что-то по типу:
PHP:
$user = ORM::factory('user')->create_user();
.
Т.е. Когда создаем нового пользователя, то после этого добавляем роли:
PHP:
$user->add('roles', 1);
Может и в моем случае так можно?
А что в этом варианте вообще может смущать? Что роль не добавится пользователю? Там и валидации никакой не будет, это тупое сохранение связи обычным Insert'ом.

Можно логику и вне catch собирать (особенно если более двух объектов на проверку, чтобы не делать вложенные try/catch), просто собирать все в $errors, и потом по нему судить, все ли успешно. Как вариант.
 
Сверху