可能重复:
数据抽象层和数据访问层之间有什么区别?
我刚刚在nettuts上阅读了这篇文章.我有点困惑.数据访问层和数据库抽象层之间有什么区别?
另外,我应该为此制作自己的自定义类,还是使用PDO更好?
我有一个DatabaseOps执行所有CRUD操作的类.其他类(例如User)继承自它,并使用此类中的方法来执行CRUD操作.我有另一个名为Databaseopen-connection,close connection,fetch array,确认查询等的类.我应该将它们写入单个类(数据访问/抽象层)吗?哪一个会更好?
您在Ruby中使用的数据库抽象/适配器是什么?我主要对数据导向的功能感兴趣,而不是那些具有对象映射的功能(如活动记录或数据映射器).
我目前正在使用续集.还有其他选择吗?
我最感兴趣的是:
目的是在编写代码时操纵具有未知结构的数据,这与对象映射相反,其中结构或大多数结构通常是众所周知的.我不需要对象映射开销.
有哪些选项,包括对象映射库的后端?
我正在寻找一个处理MVC3/.Net应用程序的数据库访问的类.
该类是静态的,为常见的数据库查询提供了很好的方便方法 - 各种各样的东西,如"GetColumnBValueForColumnA()",以及更复杂的查询.对于给定的解决方案和域,它是一个很好的因子/优化因素.
然而,看到这个类是静态的,引发了一些关于这可能是一个坏主意的遗忘的记忆(也许是在多线程的背景下?),我无法摆脱这种感觉.
保持这种类静态是一个好主意,还是应该为每个数据库调用实例化它?
在 CodeIgniter 用户指南中,示例模型对相应数据库表中的每个字段都有一个属性:
class Blogmodel extends CI_Model {
var $title = '';
var $content = '';
var $date = '';
//...
Run Code Online (Sandbox Code Playgroud)
然而,当它返回一组博客文章时,它们只是通用对象。
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
Run Code Online (Sandbox Code Playgroud)
如果每篇博文都只是一个通用对象,那么类开头的属性的目的是什么?
似乎将每篇博客文章都作为一个完全成熟的模型对象填充它的内容会很好。然后您可以编写在内部获取值的方法。但是,用户指南中的所有示例似乎都显示每个控制器具有每个模型的一个实例,并使用该对象获取包含数据库值的通用对象。此外,示例实例化模型的方式 ( $this->load->model('Blog');) 很明显,您只需要在控制器中拥有模型的一个实例。
如果我的博客文章有一个status作为整数存储在数据库中的值,但在几个不同的控制器中,我想将该值显示为人类可读的字符串,我应该把那个函数/方法放在哪里?由于我需要在多个控制器中使用它,并且它特定于一个对象,因此我认为它应该是模型对象的一种方法。如果每篇博文都是模型的一个实例,我可以这样写:
function get_human_status()
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$this->status];
}
Run Code Online (Sandbox Code Playgroud)
但是,如果每篇博客文章都是一个通用对象,则它必须如下所示:
function get_human_status($data)
{
$lookup = array(
1 => 'Active',
2 => 'Hidden',
3 => 'Pending');
return $lookup[$data->status];
} …Run Code Online (Sandbox Code Playgroud) Zend Framework 2声称具有"随意使用"设计,允许您轻松使用其任何模块而无需承诺完整堆栈.我需要一个好的数据库访问层,从网上的文档和推荐我喜欢Zend\Db的外观.我已将Zend/Db文件夹放在我的/ lib目录中,但是我无法让PHP识别Zend\Db\Adapter\Adapter类.当我尝试使用它时,我不断收到致命错误:
致命错误:第6行/home/username/public_html/test.php中找不到类'Zend\Db\Adapter\Adapter'
我试过在我的.htaccess中设置ZF2_PATH:
SetEnv ZF2_PATH /home/username/public_html/lib/Zend
我已经尝试在我的代码中设置包含路径:
set_include_path( $_SERVER['DOCUMENT_ROOT'] . '/lib' . PATH_SEPARATOR . get_include_path() );
我已经尝试显式加载和实例化Zend\Loader:
require_once 'lib/Zend/Loader/StandardAutoloader.php';
$zendLoader = new Zend\Loader\StandardAutoloader();
$zendLoader->register();
Run Code Online (Sandbox Code Playgroud)
这些都没有任何影响.我试图明确要求的Zend/DB /适配器/ Adapter.php,并没有解决我看到的错误,但我只是得到了同样的错误了它的一个依赖,所以这不是一个可行的解决方案.
我在这做错了什么?ZF2是不是真的设计用于这种模块化使用,还是我错过了什么?
编辑:我通过编写自己的自动加载功能来实现这一点:
function autoloader($class) {
$path = explode('\\', $class);
foreach ($path as $p) {
$cp .= DIRECTORY_SEPARATOR . $p;
}
include __DIR__ . '/lib/' . $cp . '.php';
}
spl_autoload_register(autoloader);
Run Code Online (Sandbox Code Playgroud)
这种有意义 - 很明显,如果我不使用框架的其余部分DB模块,我不能指望框架为我做自动装填 - 除了我仍然不明白为什么手动装载的Zend \装载机没有解决问题.是不是处理自动加载Zend\Loader的问题?无论如何,我现在有一个可行的解决方案,但如果有更好的解决方案,我很乐意听到它.
是否可以在drupal中进行跨数据库联接?
假设您有两个数据库,drupal和old_data_source。你想加入drupal.node到old_data_source.page。
db_set_active()可以调用以使用多个数据库。但是找不到关于跨数据库表联接的任何信息!
(我正在将其作为迁移脚本的一部分进行研究,并将删除old_data_source)