【问题标题】:Kohana ORM Update not workingKohana ORM 更新不起作用
【发布时间】:2011-06-14 21:40:27
【问题描述】:

我在 2 天前发现了 Kohana,在遇到了一些问题并设法解决之后,我遇到了一个非常奇怪的问题。 当我尝试更新数据库中的条目时,而不是更新条目 ORM 只是插入一个新行。 一切都类似于这个例子http://kohanaframework.org/3.0/guide/orm/examples/simple
我的代码(控制器文件):

class Controller_Admin extends Controller {
   ...
   public function action_test($id)
   {
      $inquiry = ORM::factory('inquiry')->where('Id', '=', $id)->find(); // $inquiry  = Model_Inquiry($id) doesn't work, too
      $inquiry ->Name = 'Someone';
      $inquiry ->save();
   }
   ...
}

模型文件:

class Model_Inquiry extends ORM
{
    protected $_table_name = 'mytable';
}   

您知道为什么它会插入新条目而不是更新旧条目吗?我读到这是因为 ID 设置不正确,但我尝试使用固定值 (->where('Id', '=', 5)) 并且它不起作用(它仍然插入了一个新行)。

提前致谢!

【问题讨论】:

    标签: php mysql orm insert kohana-3


    【解决方案1】:

    您的记录一开始就没有加载。要检查它是否已加载,请执行以下操作:

    if ($inquiry->loaded()){...
    

    此外,您可以通过以下方式检查已运行的查询:

    echo $inquiry->last_query();
    

    因此您可以手动检查返回给 ORM 的确切内容。

    这里的主要问题是您使用save() 而不是更严格并使用create() / update()。如果你使用update(),ORM 会抛出一个异常,抱怨记录没有被加载。

    Save 基本上是这些方法的代理,依赖于加载的状态。

    (我假设您使用的是 Kohana 3.1,因为 3.0 ORM 根本没有单独的更新/创建方法)

    【讨论】:

    • 谢谢!未加载记录,因为主键列是“Id”而不是“id”。我不得不用受保护的 $_primary_key = 'Id' 覆盖默认值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多