1、SELECT * FROM `bota_language` WHERE `type` = 'order_type';

id  key     value      type       
------  ------  ---------  ------------
   446  1       原单         order_type 
   447  2       改签单        order_type 
   448  3       退票单        order_type 
   449  6       退款单        order_type

2、SELECT `type`, GROUP_CONCAT(CONCAT_WS('->',`key`,`value`) ORDER BY `key` ASC SEPARATOR '||') FROM bota_language GROUP BY `type`;

order_type                1->原单||2->改签单||3->退票单||6->退款单                                                                                                                                                                                                                                                                                                                                                                                                                           
order_writeoff_status     1->审批中||2->已同意||3->已拒绝

3、ORM代码:

<?php defined('SYSPATH') OR die('No direct script access.');

class ORM extends Kohana_ORM {

    /**
* Model configuration, table names plural?
* @var bool
*/
protected $_table_names_plural = FALSE; /**
* Creates and returns a new model.
* Model name must be passed with its' original casing, e.g.
*
* $orm = ORM::factory('User_Token');
*
* @chainable
* @param string $orm Model name
* @param mixed $id Parameter for find()
* @return ORM
*/
public static function factory($orm, $id = NULL)
{
// Set class name
$orm = 'ORM_'.$orm; return new $orm($id);
} /**
* Updates or Creates the record depending on loaded()
*
* @author Kumchoy
* @since 20180712
* @final 20180712
*
* @chainable
* @param Validation $validation Validation object
* @return ORM
*/
public function save(Validation $validation = NULL)
{
try {
//keyword字段拼接
if (key_exists('keyword', $this->table_columns()) and
(!$this->get('keyword') or preg_match('/^(autokw||)/', $this->get('keyword')))) {
$comment = Arr::path($this->table_columns(), 'keyword.comment');
$cols = explode('||', preg_replace('/^(.*,)/', '', $comment));
$database = Kohana::$config->load('database.' . Database::$default . '.connection.database');
$keyword = DB::select(DB::expr("CONCAT(
'CONCAT(\'autokw||\',',
REPLACE(
GROUP_CONCAT(
CONCAT('IFNULL(`',column_name,'`,\'\')') ORDER BY column_name SEPARATOR '||'
)
,'||',',\'||\',')
,')') AS keyword"))
->from(DB::expr('information_schema.columns'))
->where('table_schema', '=', $database)
->where('table_name', '=', $this->_db->table_prefix() . $this->table_name())
->where('column_name', 'in', $cols)
->cached(null)
->execute()
->get('keyword');
if ($keyword) {
$this->set('keyword', DB::expr("{$keyword}"));
}
}
} catch (Exception $e) {
}
parent::save($validation); if (isset($keyword)) {
$_saved = $this->saved();
$this->reload();
$this->_loaded = $this->_saved = $_saved;
} return $this;
} protected $_previous_values = NULL;//cache previous values
public function create(Validation $validation = NULL)
{
$this->_previous_values = $this->_original_values;
return parent::create($validation);
}
public function update(Validation $validation = NULL)
{
$this->_previous_values = $this->_original_values;
return parent::update($validation);
}
public function delete()
{
$this->_previous_values = $this->_original_values;
return parent::delete();
}
public function previous_values()
{
return $this->_previous_values;
}
}

4、keyword字段内容如:

autokw||上海浦东新区赵高公路1269号4楼||13455454556||老完||上海||上海广园客房部||7811920||||[{"userid":"\u5165\u4f4f","username2":"","mobile":"13455555555","idtype":"","userno":"","username":"\u5165\u4f4f","usertype":0,"_usertype":"\u6210\u4eba"}]||1||||老完

5、soyoung项目注意事项

1、不能自拼sql操作数据库,select例外,但也建议用DB类组装sql执行;
2、insert,update,delete强制orm,原因orm save对keyword字段做了处理

kohana orm巧用字段备注支持扩展的更多相关文章

  1. ORM基础之字段及其参数介绍

    一.外键ForeignKey 1.字段参数 1.to 设置要关联的表 2.to_field 设置要关联的表的字段(一般不设置,默认使用主键id关联) 3.related_name 反向操作时,使用的字 ...

  2. Django中ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) 1 ORM介绍 1.1 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对 ...

  3. Django ORM中常用字段和参数

    一些说明: 表myapp_person的名称是自动生成的,如果你要自定义表名,需要在model的Meta类中指定 db_table 参数,强烈建议使用小写表名,特别是使用MySQL作为后端数据库时. ...

  4. django中的ORM介绍和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  5. Django --ORM常用的字段和参数 多对多创建形式

    1 ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型 ...

  6. Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM)

    Django中ORM介绍和字段及字段参数   Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简 ...

  7. Django中的ORM介绍,字段以及字段的参数。

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  8. Django ORM介绍 和字段及字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  9. Django中ORM介绍和字段参数

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

随机推荐

  1. unity让碰撞只发生一次

    碰撞发生在帧的开始,所以你可以检测到冲突,并在LateUpdate复位: private bool hasCollided = false; void OnCollisionEnter(Collisi ...

  2. Discrete Mathematics and Its Applications | 1 CHAPTER The Foundations: Logic and Proofs | 1.2 Applications of Propositional Logic

    Translating English Sentences System Specifications Boolean Searches Logic Puzzles Logic Circuits

  3. js swich

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. HTTP请求状态码为400时的原因

    2019-11-30 出现这个请求无效说明请求没有进入后台服务器里 原因: (1)前端提交的字段名称或者字段类型和后台的实体类不一样 或者前端提交的参数跟后台需要的参数个数不一致,导致无法封装 (2) ...

  5. 关于golang的label

    1 label所在的代码段在没有跳转的时候按照所在的位置按顺序执行 2 break label和continue label可以一次性从多重循环中跳出 3 goto label的用法和c/c++中的一 ...

  6. 首次全备及事务备份对数据库的影响,2014 SpexSql log评估版探索

    参考:https://www.cnblogs.com/gered/p/9882367.html 关键词:解析事务日志 新建数据库test3,然后查看日志文件,382行记录 SELECT min([Be ...

  7. zebra代码分析

    http://blog.csdn.net/xuyanbo2008/article/details/7439738

  8. 搜索专题: HDU1026Ignatius and the Princess I

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. python学习第五十二天logging模块的使用

    很多程序都有记录日志的需求,并且日志包含的信息即有正常的程序访问日志,还可能有错误,警告等信息输出,python的 logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  10. PCIe基础篇(二)、协议详解

    一个完整的PCIe协议体系结构包括应用层.事务层(Transaction Layer).数据链路层(Data Link Layer)和物理层(Physical Layer).其中,应用层由用户需要自行 ...