Как лучше поступить при сохранении записи?
Доброе время суток, уважаемые форумчане.
Для получения данных в форму редактирвания я использую:
$one_department_o1 = ORM::factory('department')
->where('id', '=', $id)
->or_where('id', '=', DB::expr('('.$main_dep.')'))
->find_all();
Результат действия (две записи, из одной таблицы):
Database_MySQL_Result Object ( [_internal_row:protected] => 0 [_query:protected] => SELECT `department`.`id` AS `id`, `department`.`abbreviation` AS `abbreviation`, `department`.`name` AS `name`, `department`.`main_dep_id` AS `main_dep_id`, `department`.`status` AS `status`, `department`.`user_id` AS `user_id`, `department`.`hierarchical_dep` AS `hierarchical_dep` FROM `departments` AS `department` WHERE `id` = 23 OR `id` = (SELECT `main_dep_id` FROM `departments` WHERE `id` = 23) [_result:protected] => Resource id #113 [_total_rows:protected] => 2 [_current_row:protected] => 0 [_as_object:protected] => Model_department [_object_params:protected] => )
Получение необходимой информации и вставка одной из записей в окно редактирования.
Но если я хочу сохранить изменения в окне (для одной отображаемой записи), то я должен для установки значений использовать метод «values» (в «ORM»).
Например:
$data = Arr::extract($_POST, array('abbreviation', 'name', 'user_id', 'main_dep', 'status',));
$one_department_o1->values($data)).
Но так как в " …\Database\Result.php"
этого метода и кода не было, то компилятор выкидывает ошибку:
Call to undefined method Database_MySQL_Result::values()
Вопрос: если пользователь захочет отредактировать запись, как вариант, при нажатии кнопки «Сохранить», мне нужно будет создать другую модель?
…
if ($this->request->post())
{
$one_department_o2 = ORM::factory('department', $id);
$data = Arr::extract($_POST, array('abbreviation', 'name', 'user_id', 'main_dep', 'status',));
$one_department_o2->values($data);
…
Обновление
Для редактирования записи в конкретной модели используется такой код:
$one_department_o1[1]->values($data)
$one_department_o1[1]->save();
где [1] - это порядковый номер конкретной модели в наборе моделей "$one_department_o1"
Но вопрос в том, что я знаю только "id" (строки) в этой модели, а не ее порядковый номер в наборе моделей.
Обновление 2
Да, согласен первый вариант с
ORM::factory('department', $id)->values($data)->save();
Я уже использовал и он рабочий, но обращаться еще раз к БД (когда у тебя все уже есть), это слишком затратно и не уважительно к БД.
По сути, это многомерный массив, если б можно было бы выдернуть название первого ключа у конкретного id.