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. 一次性计划任务at与周期性计划任务crontab

    一.at一次性计划任务使用 at语法格式: at 时间 at设置计划任务 1.下载at程序 [root@li ~]# yum install at -y 2.启动atd服务 [root@li ~]# ...

  2. 深度学习之美(张玉宏)——第四章 人生苦短我用python

    1 函数参数 (1)收集参数:以一个星号*加上形参名的方式,表示这个函数的实参个数不定,可能0个可能n个. def varParaFun(name,*param): print('位置参数是:',na ...

  3. 【Linux开发】./configure,make,make install的作用

    这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...

  4. [LeetCode] 1090. Largest Values From Labels

    使用 Java 爬取 LeetCode 题目内容以及提交的AC代码 传送门 Description We have a set of items: the i-th item has value va ...

  5. python字符串-方法

    一.1. upper()作用:将字符串中字符转换为大写 In [17]: spam Out[17]: 'hello,world' In [18]: print(spam.upper()) HELLO, ...

  6. Java利用Base64编码和解码图片文件

    1.编码与解码代码如下所示: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import jav ...

  7. JS 的 Array 和String 常混淆方法

    知识一: 1.slice() 提取字符串 slice[ start, end) 如果参数为负数,表示从尾部开始算起. 2.subString() 提取字符串 3.subStr() 提取字符串 subS ...

  8. dsLinq.Count() 引发了“System.NullReferenceException”类型的异常

    DataTable dt = PurchaseArriveInfoBus.GetPurchaseArriveInfo(companyCD, txtArriveNo, txtTitle, txtProv ...

  9. PAT Basic 1032 挖掘机技术哪家强 (20 分)

    为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即参赛人数.随后 N 行, ...

  10. PAT Basic 1046 划拳 (15 分)

    划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...