Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Мне нужно изменить(обновить) запись в БД.
http://forum.kohanaframework.su/viewtopic.php?f=33&t=487
Страница 1 из 3

Автор:  ivanovbl4 [ 04 дек 2012, 08:02 ]
Заголовок сообщения:  Мне нужно изменить(обновить) запись в БД.

Мне нужно изменить(обновить) запись в БД. При помощи save() не получается, в место изменения записи добавляется новая. Я делаю форму редактирования. В общем суть в том что нужно в адресной строке ввести id записи и затем содержимое записи загружается в определенные поля формы, содержимое полей нужно изменить и сохранить. Все проходит нормально но только запись не обновляется а просто добавляется новая. В начале метода использую вот это:
Код:
$parameters = $this->request->param();


Потом еще код для вывода записей из таблицы в поля формы и валидация. А вот сам отрывок кода для изменения записи:

Код:
$city = ORM::factory(‘city’, $parameters['id']);
$city->name = $_POST['name'];
$city->about = $_POST['description'];
$city->save();
if($city->saved())
echo ‘город ‘.$city->name.’ сохранен’;


Не пойму в чем дело… :?:

Автор:  Zorato [ 04 дек 2012, 21:22 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Такое поведение возможно, когда запись не может быть найдена по id.
Попробуйте:
Код:
$city = ORM::factory(‘city’, $parameters['id']);
if ( ! $city->loaded()) die('Город не с id="'.$parameters['id'].'" не найден!');
$city->name = $_POST['name'];
$city->about = $_POST['description'];
$city->save();
if($city->saved())
echo ‘город ‘.$city->name.’ сохранен’;

Если увидите данное сообщение, то проверяйте значение
Код:
$parameters['id']
, возможно лучше использовать
Код:
$this->request->param('id');
или что-то не так с роутами.

Автор:  ivanovbl4 [ 05 дек 2012, 07:51 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Спасибо что откликнулись. Сейчас буду пробовать то что вы предложили.

Автор:  ivanovbl4 [ 05 дек 2012, 08:40 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Zorato, попробовал предложенные вами варианты. НЕ помогло.
После того как прописал:
Код:
if ( ! $city->loaded()) die('Город не с id="'.$parameters['id'].'" не найден!');
и попробовал изменить запись, вылезло такое сообщение:
Город с id="edit" не найден!

И почему здесь "edit"? Не понимаю.
Вариант с
Код:
$this->request->param('id');
тоже безуспешен.
Цитата:
Если увидите данное сообщение, то проверяйте значение
Код:
$parameters['id']
а как проверить это значение?
Цитата:
или что-то не так с роутами
если проблема с роутами, то как это исправить?

Автор:  ivanovbl4 [ 05 дек 2012, 09:37 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Решил выложить скрины, может это поможет быстрее разобраться.
Ввожу идентификатор записи в адресную строку, в данном случае 6. Далее открывается форма редактирования с загруженными в поля записями:
Изображение
http://yadi.sk/d/DO3TydP7132S3

После того как нажимаем кнопку сохранить, вылезает это:
Изображение
http://yadi.sk/d/Lq-_laPl132T5

Почему в адресной строке вместо id появляется "edit"? И в $parameters['id'] тоже передается "edit". Может в этом и проблема кроется?
Форумчане, пожалуйста помогите, вся надежда на вас. Уже месяц не могу продолжить из-за этого.

Автор:  AmberLEX [ 05 дек 2012, 14:21 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Так может роуты покажете? Форму, куда отправляется запрос?

Автор:  ivanovbl4 [ 05 дек 2012, 14:48 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Сейчас сидел и читал урок "Роутинг — Часть 1". До этого я назначение роутов вообще не понимал. А теперь уже имею представление о них и понимаю зачем они нужны. По ходу чтения статьи, поймал себя на мысли, что у меня проблема все-таки с роутами, так как оказалось что у меня только один роут, тот что по умолчанию:
Код:
Route::set('default', '(<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'controller' => 'welcome',
      'action'     => 'index',
   ));
Я его когда-то согласно первым урокам настроил, а потом забыл про эти роуты. Может мне нужно еще несколько роутов написать?

Автор:  AmberLEX [ 05 дек 2012, 14:58 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

По умолчанию для вашей задачи пока достаточно
city - контроллер
edit - экшн
id - параметр
Куда после нажатия форма отправляет данные?
<?php echo Form::open(Request::current()) ?>

Автор:  ivanovbl4 [ 05 дек 2012, 15:34 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Опишу подробнее что у меня имеется. У меня 5 контроллеров:
city
street
house
client
phone
Еще есть шестой контроллер "Welcome". Он был по умолчанию я его не удалял. Я его никак не использую и по сути он мне не нужен. Ну да ладно. Соответственно у меня 5 таких же моделей и 5 представлений с формами редактирования(edit_city, edit_street, и т.д.). В каждом контроллере есть метод "edit()". Вот полностью метод из контроллера city:
Код:
public function action_edit()
   {
   //получаем параметр id из адресной строки
   $parameters = $this->request->param();
   if(isset($parameters['id']))
   {
      $view = View::factory('edit/edit_city');
      $view -> parameters = $parameters;
      $c = ORM::factory('city',$parameters['id']);
           $view->c = $c;
   if(Request::$initial->method() === HTTP_Request::POST)
    {
      $post = Validation::factory($_POST)
          ->rule('name', 'not_empty')
          ->rule('name', 'min_length', array(':value',2))
           ->rule('name', 'max_length', array(':value',200))
          ->rule('description', 'min_length', array(':value',5))
           ->rule('description', 'max_length', array(':value',200));
               
       if ($post->check())
                   {
               $city = ORM::factory('city', $parameters['id']);
               if ( ! $city->loaded()) die('Город с id="'.$parameters['id'].'" не найден!');
               $city->name = $_POST['name'];
               $city->about = $_POST['description'];
               $city->save();
               if($city->saved())
               echo 'город '.$city->name.' сохранен';
               }
       else {
      $errors = $post->errors('city');
      $view->errors = $errors;
      }
      
       }   
      $this->template->content = $view;
      }
      else
            {
           //если параметр id не существует то обрабатываем исключение
             throw new HTTP_Exception_404('No param');
            }       
}

Автор:  AmberLEX [ 05 дек 2012, 17:38 ]
Заголовок сообщения:  Re: Мне нужно изменить(обновить) запись в БД.

Вы не хотите ответить на вопрос?)

Страница 1 из 3 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/