我做了很多CodeIgniter项目,因为我只使用了$ this-> db->查询,而不是任何其他方法。
人们说当我们更改数据库时使用它会很复杂。
所以人们使用db-> get,db-> where和包括join在内的函数。
例如我现在使用mysql与$ this-> db->查询我的项目,如果我将我的数据库更改为其他任何人...这将是一个问题......
此外,我们应该非常清楚在开始项目之前选择数据库,这将是一个很好的做法,人们都知道这一点......除此之外... ...
如果我们只在CodeIgniter项目中使用$ this-> db->查询,会出现什么差异?
任何类型的答案都会有所帮助...建议,建议和答案。 :)
答案 0 :(得分:3)
在某些方面,我看到使用Active Record类的好处,但在其他方面,它可能是一个缺陷。让我详细说明一下。
正如birderic所说,使用Active Record类的好处是CodeIgniter基本上为你在config.php文件中指定的数据库引擎中编写了t-SQL语句。以下面的代码为例:
$this->db->select('*')->from('users')->where('name', 'bob');
$query = $this->db->get(0,10);
将在MySQL中生成:SELECT * FROM Users WHERE Name = 'bob' LIMIT 0, 10
。
这在PostgreSQL中:SELECT * FROM Users WHERE Name = 'bob' LIMIT 0 OFFSET 10
主动记录类及其查询构建器负责处理tSQL中的细微差别。当您要迁移数据库或在新数据源上测试模型代码时(例如,可能使用SQLite数据库进行单元测试),这是一个巨大的好处。
然而,在硬币的另一面,我认为通常数据库往往更难以改变,并且在迁移时会有更多的“捕获”。如果您将所有代码编写为Active Record代码,那么它实际上永远与CodeIgniter绑定。然后很难将这些代码和那些查询转移到新的MVC框架,甚至是新的语言。
使用Active Record类可以为您提供数据库自由,但可以将您与CodeIgniter联系起来。使用普通的SQL查询可以为您提供框架自由,但可以将您与数据库联系起来。
那就是说,我发现两者的混合效果都很好。有时我的查询非常复杂,并且有子查询,各种连接,奇怪的SQL Server特定语法......所以我必须使用$ this-> db-> query()。但是,对于所有简单的东西,我使用Active Record。
答案 1 :(得分:2)
来自user guide:
除了简单性之外,使用Active Record功能的一个主要好处是它允许您创建独立于数据库的应用程序,因为查询语法是由每个数据库适配器生成的。它还允许更安全的查询,因为系统会自动转义值。
活动记录类根据您选择的驱动程序生成相应的SQL。如果您将来决定更改数据库,那么您需要做的就是对您的应用程序进行一些小的配置更改,以使其能够使用新数据库。
通过使用$this->db->query()
,您可以使用其他数据库系统不支持的MySQL特定功能。如果您要切换到另一个数据库,则某些查询可能不再有效。
我无法专门讨论MySQL所支持的内容而不受其他数据库系统的支持,但无论是通过Stack Overflow还是谷歌都无法找到它。