我必须使用cakephp不支持的旧数据库驱动程序(ora_logon)来处理Oracle数据库。我不能使用oci驱动程序来代替。
现在我做以下事情:每个模型的每个方法都连接到数据库并检索数据
class SomeClass extends Model {
public function getA(){
if ($conn=ora_logon("username","password"){
//make the query
// retrieve data
//put data in array and return the array
}
}
public function getB(){
if ($conn=ora_logon("username","password"){
//make the query
// retrieve data
//put data in array and return the array
}
}
}
我知道这不是最好的方法,我怎么能让cakephp管理数据库连接的打开和关闭,而让模型只检索数据呢?我对任何数据库抽象层都不感兴趣。
2条答案
按热度按时间pbwdgjma1#
我认为您可以创建自己的OracleBehavior,每个模型都可以使用这个行为,在其中,您可以覆盖或扩展Model的find()行为,以构建一个传统的oracle查询并运行它(我对Oracle了解不多)。
然后,在Behavior的beforeFind()中,您可以打开连接,在Behavior的afterFind()中,您可以关闭数据库连接。
这样,每次运行查询之前,它都会自动打开连接,而每次查找之后,它都会关闭连接。您可以使用beforeSave()和afterSave()以及beforeDelete()和afterDelete()执行相同的操作。(您可能希望在Behavior中创建一个
connect()
方法和disconnect()
方法,这样就不会在每个beforeX()方法中有重复的代码。iibxawm42#
你真的需要扩展一个Cake Model类吗?
某个控制器: