php redbean update,redbeanphp和表前缀
我在我的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和表前缀的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 控件 手机触控,html5手机触
- 下一篇: Php7实现文件下载,PHP7 SFTP