kohana orm巧用字段备注支持扩展

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字段做了处理

原文地址:https://www.cnblogs.com/hnhycnlc888/p/11104650.html

时间: 2024-08-07 07:14:35

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

Django ORM中常用字段和参数

Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这里需要知道的是Django中的CharFiel

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

https://www.cnblogs.com/liwenzhou/p/8688919.html Django中ORM介绍和字段及字段参数 Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库

Django中ORM介绍和字段及其参数

ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. ORM在业务逻辑层和数据库层之间充当了桥梁的作用. ORM的由来 字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational). 几乎所有的软件开发过程中都会涉及到对象和关系数据库.在用户层面和业务逻辑层

在PowerDesigner中自动生成sqlserver字段备注

PowerDesigner是数据库设计人员常用的设计工具,但其自生默认生成的代码并不会生成sqlserver数据库的字段备注说明.在生成数据库后还需要手工修改,比较麻烦. 先介绍一种办法,直接由PowerDesigner自动生成sqlserver的备注字段. 1.在PowerDesigner中建立好物理模型后 2.在PowerDesigner中选择工具——>Execute Commends——>Edit/Run Script,打开如下对话框: 3.在对话框中输入如下代码: Option Exp

PowerDesigner 16.5对SQL Server 2012 生成数据库时&quot;不支持扩展属性&quot;问题

团队合作设计一套系统数据模型,创建了PDM后,Table.View.Store Procedure等都创建好了,且创建了多个Schema方便管理这些数据库对象,但Table.view.Column等对象有Comment时(用来在团队不同成员间共享描述信息) 生成数据库时会得到一个提示"不支持扩展属性,或对象不存在",分析发现异常在类似以下语句: if exists(select 1 from sys.extended_properties p where p.major_id = ob

Django静态文件配置、request方法、ORM简介、字段的增删改查

app的创建注意事项: 在Django新创建的app要在seetings.py中添加注册,才会生效 创建app:django-adminapp an startapp app名称 或者 python3 mansge.py startpp名称 手动创建的app不会自带存放html的templates文件夹,需要手动创建 Django静态文件配置 对于前端已经写好了的文件,我们只是拿过来使用,那么这些文件都可以称之为"静态文件"; 静态文件可以是:boostrap一类的前端框架,已经写好了

linux中添加PHP的mongoDB支持扩展

最近使用ThinkPHP连接mongoDB数据库进行增删改查,在使用之前,需要PHP本身支持对mongoDB的连接,下面是我安装PHP的mongoDB扩展的方法 wget -c http://pecl.php.net/get/mongo-1.3.6.tgz tar zxvf mongo-1.3.6.tgz # 解压 cd mongo-1.3.6 /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/p

JEPLUS快速开发平台怎么支持扩展第三方供应商短信发送

一.效果展示 可以不限制与平台集成的网建提供商,可以自己写发送短信实现,平台会提供一个扩展类的实现. 二.准备工作 JEPLUS平台版本:5.0.0.1 Eclipse版本:4.3以上 Intellij IDEA : 2015以上,推荐使用IDEA2017版本以上(功能更强大,UI更美观,支持各种插件,还在等什么?) Resin : 3.0以上 Tomcat:6.0以上 JDK:1.7以上 ApacheServer:2.0以上 三.技术要求 Java水平:最好具备初级及以上水平 短信接口:了解短

快速开发平台怎么支持扩展第三方供应商短信发送—JEPLUS快速开发平台

一.效果展示 可以不限制与平台集成的网建提供商,可以自己写发送短信实现,平台会提供一个扩展类的实现. 二.准备工作 JEPLUS平台版本:5.0.0.1 Eclipse版本:4.3以上 Intellij IDEA : 2015以上,推荐使用IDEA2017版本以上(功能更强大,UI更美观,支持各种插件,还在等什么?) Resin : 3.0以上 Tomcat:6.0以上 JDK:1.7以上 ApacheServer:2.0以上 三.技术要求 Java水平:最好具备初级及以上水平 短信接口:了解短