Kohana 3.2 ORM вставляет строку вместо обновления - PullRequest
0 голосов
/ 13 февраля 2012

SQL:

CREATE TABLE IF NOT EXISTS `photoalbums` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

Модель:

<?php defined('SYSPATH') OR die('No Direct Script Access');

    Class Model_PhotoAlbum extends ORM {}

?>

Действие контроллера:

public function action_edit()
{
    $id = $this->request->param('id');
    $album = ORM::factory('photoalbum', $id);
    $this->template->album = $album;

    if ($this->request->post())
    {
        $album->title = $this->request->post('title');
        $album->save();
        $this->request->redirect('/');
    }
}

Каждый раз, когда я редактирую какой-то альбом, ORM просто вставляет новый экземпляр в БД, а не обновляет его. Я очень хорошо гуглил, но не могу найти решение. Кроме того, я попытался использовать Jelly ORM, и это тоже вызвало эту проблему.

UPDATE:

TWIG:

<!DOCTYPE HTML>
<html>
<head>
    <title>Фотоальбомы</title>
    <link rel="stylesheet" type="text/css" href="/media/css/main.css" />/>
    <script src="media/js/jquery-1.7.1.min.js" />
    <script src="media/js/main.js" />
</head>
<body>
    <h1>Новый фотоальбом</h1>
    <form action="/photoalbum/edit/" method="POST">
        <p>
            <label for="title">Название:</label><input type="text" id="title" name="title" value="{{ album.title }}" />
        </p>
        <p><input type="submit" value="Сохранить" /></p>
    </form>
</body>
</html>

1 Ответ

1 голос
/ 13 февраля 2012

Кажется, проблема в том, что вы не передаете идентификатор контроллеру в вашей форме.

Ваше действие должно выглядеть как

action="/photoalbum/edit/ALBUM_ID"

или что-то подобное.

Вы запрашиваете идентификатор альбома с

$id = $this->request->param('id');
$album = ORM::factory('photoalbum', $id);

Но у вас нет параметра "id" в вашем действии Forms.

<form action="/photoalbum/edit/" method="POST">

Или вы можете отправить идентификатор в виде скрытого поля в форме, но затем вам нужно получить его с помощью

$id = $this->request->post('id');
...