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. 关于Unity3D中的SerialField这个Attribute的功能

    首先我们看看效果,以下是源文件的内容: 然后对应的面板: 要注意的地方其实就这里: 可以看出,public默认就可以在面板中进行修改,相应的设为private的isCreateSoldier却不会出现 ...

  2. 【HBase】二、HBase实现原理及系统架构

      整个Hadoop生态中大量使用了master-slave的主从式架构,如同HDFS中的namenode和datanode,MapReduce中的JobTracker和TaskTracker,YAR ...

  3. centos7下执行firewall-cmd显示ImportError: No module named 'gi'

    centos7 安装tomcat 及问题处理(No module named 'gi')(Job for firewalld.service failed because the control) 2 ...

  4. vue 格式化时间的插件库

    格式化时间的插件库 点击进入 moment.js网址 ,在这里可以找到需要引入的script标签 点击进入 moment.js的文档 在文档中可以找到对应的格式和例子 此文来源于: https://w ...

  5. Java——LinkedList使用Demo

    package list; import java.util.Iterator; import java.util.LinkedList; public class LinkedListDemo { ...

  6. PHP_OS的常见值

    PHP_OS是PHP中的一个预定义常量,表示当前操作系统.那么PHP_OS有哪些值可用呢??PHP_OS的值一般可以为:CYGWIN_NT-5.1,Darwin,FreeBSD,HP-UX,IRIX6 ...

  7. 使用extract-text-webpack-plugin插件后报错

    如果你使用的webpack是4+版本,那么尝试运行npm install extract-text-webpack-plugin@next ,即可解决问题 然而最好的解决办法是在webpack4+的版 ...

  8. 各类最新Asp .Net Core 项目和示例源码

    1.网站地址:http://www.freeboygirl.com2.网站Asp .Net Core 资料http://www.freeboygirl.com/blog/tag/asp%20net%2 ...

  9. Codeforces 1262D Optimal Subsequences(BIT+二分)

    首先比较容易想到肯定是前k大的元素,那么我们可以先对其进行sort,如果数值一样返回下标小的(见题意),接下里处理的时候我们发现需要将一个元素下标插入到有序序列并且需要访问第几个元素是什么,那么我们可 ...

  10. MFC- 网络编程

    一.MFC网络编程 a)CAsyncSocket用于异步非阻塞类,用UDP通信: b)CAsyncSocket的子类(派生类):Csocket同步阻塞类,用于TCP通信: c)通信前,必须调用AfxS ...