【问题标题】:Kohana ORM update, insert or delete to return number of affected rowsKohana ORM 更新、插入或删除以返回受影响的行数
【发布时间】:2012-10-30 21:22:18
【问题描述】:

使用 ORM for Kohana 创建、更新或删除后,如何获取受影响的行数?我检查了主类,但没有返回那个值......

如果有任何可能的解决方案,请告诉我。如果可以不使用查询生成器,我更喜欢只使用 ORM 类。

谢谢。

【问题讨论】:

  • 如果没有 QBuilder,你想如何创建/更新/删除多条记录?
  • 首先,感谢您的回复。好吧,实际上,假设我想使用 ORM 以特定条件(where)更新我的记录......例如,如果我想禁用我的所有用户: ORM::factory('User')->where('状态','=','禁用');我怎么知道有多少用户更新了?
  • ORM 总是使用 QBuilder 和 Database_Result 对象。请阅读:kohanaframework.org/3.0/guide/database/results。你需要类似$affected = ORM::factory('user')->where('status', '=', 'disabled')->...->execute();

标签: php kohana


【解决方案1】:

由于其Cascading Filesystem,在 Kohana 中很容易对系统或模块类进行一些更改。

在您的情况下,您需要重新定义 ORM 模块主类的方法。它的文件位于/modules/orm/classes/kohana/orm.php

/application/classes/orm.php 中创建新的ORM 模块主类文件并重新定义createupdatedelete 方法,以便这些方法返回受影响的行数。

例如,新的update 方法应该以此结尾:

// Update a single record
$update_result = DB::update($this->_table_name)
    ->set($data)
    ->where($this->_primary_key, '=', $id)
    ->execute($this->_db);

if (isset($data[$this->_primary_key]))
{
    // Primary key was changed, reflect it
    $this->_primary_key_value = $data[$this->_primary_key];
}

// Object has been saved
$this->_saved = TRUE;

// All changes have been saved
$this->_changed = array();
$this->_original_values = $this->_object;

return $update_result;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    相关资源
    最近更新 更多