Kohana 3.2 ORM插入一行而不是更新

时间:2012-02-13 00:48:12

标签: orm kohana

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只会在DB中加入新实例而不是更新它。我google了很好,但我找不到解决方案。 此外,我试图使用Jelly ORM,它也导致了这个问题。

更新

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 个答案:

答案 0 :(得分:1)

问题似乎是您没有将ID传递给表单中的控制器。

您的表单操作应该是

action="/photoalbum/edit/ALBUM_ID"

或类似的东西。

您正在使用

请求相册ID
$id = $this->request->param('id');
$album = ORM::factory('photoalbum', $id);

但您在表单操作中没有参数“id”。

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

或者,您可以将ID作为隐藏字段发送到您的表单中,但是您必须使用

来获取它
$id = $this->request->post('id');