我在我的php项目中使用Redbeanphp(http://redbeanphp.com/).我想为我的表使用表前缀.

自版本3.0以来,Redbeanphp不支持表前缀.但我想扩展Redbeanphp以支持我的项目中的表前缀.

我不想修改redbeanphp代码.但如果没有解决方案,我会这样做.

我已经尝试替换Redbeanphp的QueryWriter,但QueryWriter类并不总是相同(它取决于我的数据库的类型).

最好的方法是什么?

解决方法:

我现在得到了回应,所以我回答自己.

初始化redbean后,您可以配置新的工具箱. redbean中的工具箱处理3个重要对象:查询编写器,Redbean OODB和数据库适配器.您可以使用R :: $toolbox访问当前的redbean工具箱

你可以这样做:

R::configureFacadeWithToolbox(new RedBean_ToolBox(R::$redbean, R::$adapter, R::$writer));

这段代码什么都不做.因为您使用新工具箱配置Redbean但具有相同的OODB,相同的数据库适配器和相同的查询编写器.但是在此代码中,您可以使用自己的对象替换其中一个对象.

例如,用虚拟编写器替换编写器:

$writer = new MyQueryWriter();

R::configureFacadeWithToolbox(new RedBean_ToolBox(R::$redbean, R::$adapter, $writer));

探针如下:

>您希望用您自己的查询编写器替换查询编写器来处理表前缀

>查询编写器类并不总是相同的. Redbean为查询编写器使用5个类.该类取决于数据库类型.例如,如果使用Mysql数据库,则查询编写器类为RedBean_QueryWriter_MySQL

>您不想编写整个查询编写器.

Redbean查询编写器可能的类是:

> RedBean_QueryWriter_CUBRID

> RedBean_QueryWriter_MySQL

> RedBean_QueryWriter_Oracle

> RedBean_QueryWriter_PostgreSQL

> RedBean_QueryWriter_SQLiteT

所以,这是我的解决方案.我写了5个小课程.

class MyCubridQueryWriter extends RedBean_QueryWriter_CUBRID {

public function safeTable($name, $noQuotes = false) {

$name = prefix($name);

return parent::safeTable($name, $noQuotes);

}

}

class MyMysqlQueryWriter extends RedBean_QueryWriter_MySQL {

public function safeTable($name, $noQuotes = false) {

$name = prefix($name)

return parent::safeTable($name, $noQuotes);

}

}

class MyOracleQueryWriter extends RedBean_QueryWriter_Oracle {

public function safeTable($name, $noQuotes = false) {

$name = prefix($name)

return parent::safeTable($name, $noQuotes);

}

}

class MyPostgreSqlQueryWriter extends RedBean_QueryWriter_PostgreSQL {

public function safeTable($name, $noQuotes = false) {

$name = prefix($name)

return parent::safeTable($name, $noQuotes);

}

}

class MySQLiteTQueryWriter extends RedBean_QueryWriter_SQLiteT {

public function safeTable($name, $noQuotes = false) {

$name = prefix($name)

return parent::safeTable($name, $noQuotes);

}

}

如您所见,每个类都扩展了一个Redbean查询编写器类.我们覆盖safeTable方法. Redbean总是在表名上使用safeTable.前缀功能很简单:

function prefix($table) {

return "my_prefix_$table";

}

现在,在我们的代码中.我们可以使用数组将Redbean查询编写器类映射到我们自己的类并替换它.我们到了 :

$writerMapping = array(

'RedBean_QueryWriter_CUBRID' => 'MyCubridQueryWriter',

'RedBean_QueryWriter_MySQL' => 'MyMysqlQueryWriter',

'RedBean_QueryWriter_Oracle' => 'MyOracleQueryWriter',

'RedBean_QueryWriter_PostgreSQL' => 'MyPostgreSqlQueryWriter',

'RedBean_QueryWriter_SQLiteT' => 'MySQLiteTQueryWriter'

);

$class = $writerMapping[get_class(R::$writer)];

$writer = new $class(R::$adapter);

R::configureFacadeWithToolbox(new RedBean_ToolBox(R::$redbean, R::$adapter, $writer));

瞧瞧.现在Redbean将使用你自己的作家,你可以做你想做的!使用我们的safeTable方法,我们为数据库中的每个表名添加一个前缀.

标签:php,orm,redbean

来源: https://codeday.me/bug/20190529/1180157.html

php redbean update,redbeanphp和表前缀相关推荐

  1. 解决WP表前缀更换后出现的You do not have sufficient permission

    将安装的wordpress表前缀由默认的 wp_修改为其它了,再次登陆后台后出现 You do not have sufficient permissions to access this page. ...

  2. select....for update会锁表还是锁行

    select -for update 除了有查询的作用外,还会加锁呢,而且它是悲观锁.那它会加表锁还是行锁?相信很多人都知道这个结论:要看是不是用了索引/主键.没用索引/主键的话就是表锁,否则就是是行 ...

  3. Mysql 事务中Update 会锁表吗?

    Mysql 事务中Update 会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开 ...

  4. MySQL SELECT同时UPDATE同一张表

    2019独角兽企业重金招聘Python工程师标准>>> MySQL不允许SELECT FROM后面指向用作UPDATE的表,有时候让人纠结.当然,有比创建无休止的临时表更好的办法.本 ...

  5. Yii 2 —— Model表前缀

    1.1  Model表前缀 在大多数系统中,对于数据库的表名称都喜欢在前面增加一个前缀,譬如ecshop系统的表名称,都有前缀"ecs_",在它们的代码中到处充斥着如下代码: $G ...

  6. laravel mysql 锁表_Laravel 数据库加密及数据库表前缀配置方法

    报错问题:DecryptException in Encrypter.php line 148: The MAC is invalid. 如何运行 php artisan key:generate 这 ...

  7. mysql update join 锁表_Mysql事务中Update是否会锁表?

    两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开启了自动提交事务. 命令:select @@ ...

  8. [导入]Update实现多表更新

    方法一 多个表关联建个视图,再Update. 方法二 Update 要更新表 Set 要更新字段 = 新值 From 多个表 Where 条件 注意:update后面是不能跟多表的,但可以跟在From ...

  9. ci框架mysql多条件_CI框架同时连接不同的数据库(或不同表前缀)

    1.配置数据库 $active_group = 'default'; $query_builder = TRUE; $db['default'] = array( 'dsn' => '', 'h ...

最新文章

  1. 异步IO一定更好吗?
  2. Alpine?Distroless?Busybox?到底谁才是容器镜像的瑞士军刀?
  3. python实现将文件内容按照某一列内容的大小值重新排序_Python数据分析入门教程(四):数值操作...
  4. 剑指offer の 1-10 之javascript实现
  5. PAT1069. The Black Hole of Numbers
  6. Oracle数据库备份和恢复配置详解
  7. Windows10+CUDA8.0+VS2015+CUDNN5下配置caffe
  8. http://bassistance.de/jquery-plugins/
  9. java jave1.0.2_GitHub - dadiyang/jave at v1.0.2
  10. spss数据分析_相关分析
  11. 用python判断素数_python判断素数
  12. HttpClient登陆开心网
  13. 学透JavaScript 你真的懂 Array 吗?
  14. go html桌面,用 Go 开发桌面应用程序(GUI):Webview、Lorca 与 Electron
  15. Java基础教程-01-Java简介与变量介绍
  16. APISpace 语音验证码API
  17. 一名大学生选择军哥的乾颐堂是如何顺利通过华为HCIE的,又如何应对HCIE面试呢?...
  18. AIX 上总有一种压缩方式适合你
  19. Audacity如何改变音频节奏?Audacity调整音频节奏方法
  20. 使用opencv打开相机——python

热门文章

  1. linux查看telnet进程,SuseLinux上配置Telnet服务,重启xinetd守护进程时的异常
  2. 将指定的计数添加到信号量中会导致其超过_从烷烃中分离烯烃、从原油中分离碳氢化合物…这七大化学分离过程将影响世界...
  3. 大学生计算机实验基础考试,大学生计算机基础考试题库完整(56页)-原创力文档...
  4. extjs store 复杂json_extjs 2.3 修复 jsonstore 嵌套多级引用数据NULL的BUG
  5. php中删除评论怎么做的,php实现评论回复删除功能
  6. Python基础高级用法,必须要掌握的知识点
  7. Python for循环本质
  8. Python生成器的用法,使用生成器灵活的生成斐波那契数列
  9. python sorted原理_Python sort()和sorted()
  10. size_t是什么数据类型?为什么要用size_t替代int、unsigned int、unsigned long、unsigned long long